算法原题:给定一个整数数组和一个整数k,你需要找到数组中的独特k-diff对数。这里的k-diff对定义为一个整数对(i,j),其中i和j是数组中的绝对差异数K。
问题在k为0时,我打算用sort、unique将前面的非重复部分erase掉,但在实现时发现{-1,-1,-1, 0, 1, 3}执行过后就变成了{-1, 0, 1, 3,1,3},是否跟内存分配有关?
#include
#include
#include
using namespace std;
int findPairs(vector& nums, int k) {
sort(nums.begin(), nums.end());
for (vector::iterator it = nums.begin(); it != nums.end(); ++it){
cout << "-1第:" << *it << endl;
}
int num = 0;
if (k == 0){
unique(nums.begin(), nums.end());
for (vector<int>::iterator it= nums.begin(); it!=nums.end();++it){
cout << "0第:" << *it << endl;
}
sort(nums.begin(), nums.end());
for (int number = 0; number < nums.size(); number++){
cout << "1第" << number << ":" << nums[number] << endl;
}
nums.erase(nums.begin(), unique(nums.begin(), nums.end()));
for (int number = 0; number < nums.size(); number++){
cout << "2第"<<number<<":"<<nums[number]<< endl;
}
nums.erase(unique(nums.begin(), nums.end()), nums.end());
num = nums.size();
return num;
}
nums.erase(unique(nums.begin(), nums.end()),nums.end());
int size = nums.size();
for (int i = 0; i < size - 1; i++){
for (int j = size - 1; j >i; j--){
if (nums[j] - nums[i] == k){
num++;
}
}
}
return num;
}
int main(){
vector nums = { -1,-1,-1, 0, 1, 3 };
cout << findPairs(nums,0) << endl;
system("pause");
}
程序结果图