wsj56972340 2018-03-07 01:26 采纳率: 100%
浏览 1167
已采纳

vector有关unique以及sort

算法原题:给定一个整数数组和一个整数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");
}

程序结果图图片说明


  • 写回答

1条回答 默认 最新

  • MaoMao-go 2018-03-07 01:51
    关注

    看了下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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条