算法原题:给定一个整数数组和一个整数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");
}
程序结果图
看了下unique的使用,unique方法只会将vector中所有不重复的内容从begin覆盖,比如你原来vector的长度是6,使用unique后长度仍然是6,
所以需要使用resize将vector的大小转变下,具体参考:
http://www.cplusplus.com/reference/algorithm/unique/
int myints[] = {10,20,20,20,30,30,20,20,10}; // 10 20 20 20 30 30 20 20 10
std::vector<int> myvector (myints,myints+9);
// using default comparison:
std::vector<int>::iterator it;
it = std::unique (myvector.begin(), myvector.end()); // 10 20 30 20 10 ? ? ? ?
// ^
myvector.resize( std::distance(myvector.begin(),it) ); // 10 20 30 20 10