Problem:
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.
Analysis:这个题比26题(详解链接)多了一个条件,就是多余两个的数才算是重复,所以须要进行一次判断,本方法用dup_num来进行标记。
Anwser:
public class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length==0) return 0;
if(nums.length==1) return 1;
int count=1;
int dup_num=1;
for(int i=1;i<nums.length;i++){
if((nums[count-1]!=nums[i])){
nums[count++]=nums[i];
dup_num=1;
}
else if(nums[count-1]==nums[i]){
if(dup_num==1) {
dup_num++;
nums[count]=nums[i];//代码句1 非常重要,容易丢
count++;
}
}
}
return count;
}
}
丢掉代码句1得到如下图结果,根据结果显示明白第四个数字不改则保留了原来的数字1,所以需要改正。
稍微优化了一下代码,如下:
public class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length==0) return 0;
if(nums.length==1) return 1;
int count=1;
int dup_num=1;
for(int i=1;i<nums.length;i++){
if((nums[count-1]!=nums[i])){
nums[count++]=nums[i];
dup_num=1;
}
else if(nums[count-1]==nums[i] && dup_num==1){
dup_num++;
nums[count++]=nums[i];
}
}
return count;
}
}