欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

删除有序vector中的重复值c++

发布时间:2025/4/16 c/c++ 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 删除有序vector中的重复值c++ 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

简述

三种方法:

  • 每找到连续片段,就去掉该连续片段(缺点:费时间)
  • 双指针法,用慢指针来记录保存项,再用快指针来遍历(缺点:没有删除原数组的内容)
  • 双指针法结合第一种:同样的,用慢指针记录的部分存下来后,后续部分被直接砍掉。
  • 方法一

    class Solution { public:int removeDuplicates(vector<int>& nums) {if (nums.size() <= 1) return nums.size();int i = 0, j = i;vector<int>::iterator itr = nums.begin();while (j < nums.size()) {if (nums[j] == nums[i]) { j++; }else { // erase [begin+i+1; begin+j]if (i != j+1) nums.erase(itr + i + 1, itr + j);i++;j = i;}}if (i != j + 1) nums.erase(itr + i + 1, itr + j);return nums.size();} };

    方法二

    class Solution { public:int removeDuplicates(vector<int>& nums) {if (nums.size() <= 1) return nums.size();int i = 0;for(int j = 1; j < nums.size(); ++j) {if (nums[i] != nums[j]) nums[++i] = nums[j];}return i+1;} };

    方法三

    class Solution { public:int removeDuplicates(vector<int>& nums) {if (nums.size() <= 1) return nums.size();int i = 0;for(int j = 1; j < nums.size(); ++j) {if (nums[i] != nums[j]) nums[++i] = nums[j];}nums.erase(nums.begin()+i+1, nums.end());return nums.size();} };

    总结

    以上是生活随笔为你收集整理的删除有序vector中的重复值c++的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。