这道题目不难,注意的点有两点:
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);
}
};