赞
踩
略
以nums = [1,1,1,2,2,3]为例,被复制的元素是第一个1,第二个1,第一个2,第二个2,第一个3。也就是重复次数为0、1的元素。那么可以给每个元素设置身份标志id,代表着它们的特征:重复次数。
- id=0;
- if(nums[i] == nums[i-1])
- id++;
- else
- id=0;
- do {
- i++;
- if(nums[i] == nums[i-1])
- id++;
- else
- id=0;
- }while(id > 1);
- //困于循环的i不是我们想要的i,跳出循环的i就是我们要的i
最后要考虑的就是数组越界之类的了。将在最终代码呈现的注释区域显示。
- class Solution {
- public:
- int removeDuplicates(vector<int>& nums) {
- int n = nums.size();
- if(n==0)
- return 0;//这里要加上空数组的情形,否则提交解答时会报错
-
- int i=0, j=1, id=0;//第0个元素一定是已就位的,所以让j直接等于1
- for(;i<n ; j++)
- {
- do{
- i++;
- if(i>=n)
- break;//数组越界
-
- if(nums[i] == nums[i-1])
- id++;
- else
- id=0;
- }while(id > 1);
-
- if(i >= n)//数组越界
- break;
- nums[j] = nums[i];
- }
- return j;
- }
- };

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。