这道题目不难,注意的点有两点:
1)(i,j)和(j,i)只计算一次
2)同样的(i,j)只计算一次
刚开始一直报错,因为自己定义了结构了“pair”,后来发现是c++中有自带的pair模板类型,这里没有使用,使用了自定义的pairnum
typedef struct pairnum { int x; int y; }; class Solution { public: vector<pairnum> pairs; int findPairs(vector<int>& nums, int k) { int len = nums.size(); int total = 0; for(int i = 0; i < len; ++ i){ for(int j = i+1; j < len; ++ j){ if(abs(nums[i]-nums[j]) == k){ if(!find(nums[i],nums[j],pairs)){ insert(nums[i],nums[j]); ++ total; } } } } return total; } int find(int x, int y, vector<pairnum>& pairstore){ for(int i = 0; i < pairstore.size(); ++ i){ pairnum e = pairstore[i]; if((e.x == x && e.y == y) || (e.x == y && e.y == x)){ return 1; } } return 0; } void insert(int x, int y){ pairnum e; e.x = x; e.y = y; pairs.push_back(e); } };