Follow up for “Remove Duplicates”:
What if duplicates are allowed at most twice?
For example,
Given sorted array nums = [1,1,1,2,2,3],
Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn’t matter what you leave beyond the new length.
Remove Duplicates 的升级版,能够容许两个重复的数字。
思路一样,加一个times计数就好。每次判断,仅当times为2时,c往前移位,并换成m对应的值(这个很重要,因为很可能m跟c对应的数已经不同了)。另外,每次times重置的时候要置成1。
代码如下:
public int removeDuplicates(int[] nums) {
if(nums.length <= 2) return nums.length;
int length = 0;
int times = 1;
int v = 0, m = 0, c = 0;
v = nums[0];
while(m < nums.length){
if(nums[m] == v){
if(times == 2){
c++;
nums[c] = v;
}
times++;
m++;
}
else{
c++;
nums[c] = nums[m];
v = nums[m];
times = 1;
}
}
length = c + 1;
return length;
}
164 / 164 test cases passed.
Status: Accepted
Runtime: 368 ms