当前位置:   article > 正文

80. 删除排序数组中的重复项 II_80. 删除排序数组中的重复项 ii python

80. 删除排序数组中的重复项 ii python

一、题目描述

二、思路

  • 两个游标i、j,一个辅助变量id。
  • j用来记录元素要复制到的位置:也就是0、1、2、3……
  • i用来记录哪个元素要进行复制操作,id辅助这一过程。
  • j很好说,步长为1,直接for循环j++就可以了。
  • 关键是i,关键是哪个元素将要被复制:

nums = [1,1,1,2,2,3]为例,被复制的元素是第一个1,第二个1,第一个2,第二个2,第一个3。也就是重复次数为0、1的元素。那么可以给每个元素设置身份标志id,代表着它们的特征:重复次数。

  • 可以通过这段代码明确每个元素的id是多少:
  1. id=0;
  2. if(nums[i] == nums[i-1])
  3. id++;
  4. else
  5. id=0;
  • 当然这段代码脱离不了循环语境,这个循环可以和找i自然地放在一起:
  1. do {
  2. i++;
  3. if(nums[i] == nums[i-1])
  4. id++;
  5. else
  6. id=0;
  7. }while(id > 1);
  8. //困于循环的i不是我们想要的i,跳出循环的i就是我们要的i

最后要考虑的就是数组越界之类的了。将在最终代码呈现的注释区域显示。

三、代码呈现

  1. class Solution {
  2. public:
  3. int removeDuplicates(vector<int>& nums) {
  4. int n = nums.size();
  5. if(n==0)
  6. return 0;//这里要加上空数组的情形,否则提交解答时会报错
  7. int i=0, j=1, id=0;//第0个元素一定是已就位的,所以让j直接等于1
  8. for(;i<n ; j++)
  9. {
  10. do{
  11. i++;
  12. if(i>=n)
  13. break;//数组越界
  14. if(nums[i] == nums[i-1])
  15. id++;
  16. else
  17. id=0;
  18. }while(id > 1);
  19. if(i >= n)//数组越界
  20. break;
  21. nums[j] = nums[i];
  22. }
  23. return j;
  24. }
  25. };

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50578
推荐阅读
相关标签
  

闽ICP备14008679号