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 ofnums being 1
, 1
, 2
, 2
and3
. It doesn't matter what you leave beyond the new length.
题意:移除排序数组中的重复元素,一个元素最多出现两次
分类:数组,双指针
解法1:和leetcode--Remove Duplicates from Sorted Array一样,使用双指针,但是每次覆盖时,判断是否由两个以上重复,如果是,覆盖两次,否则覆盖一次
public class Solution {
public int removeDuplicates(int[] nums) {
int cur = Integer.MIN_VALUE;
int count = 0;
int sum = 0;
for(int i=0;i<nums.length;i++){
if(cur==nums[i]){
if(count==1){
nums[sum] = nums[i];
count++;
sum++;
}else{
count = 0;
cur = nums[i];
}
}else{
cur = nums[i];
nums[sum] = nums[i];
sum++;
count = 1;
}
}
return sum;
}
}
public class Solution {
public int removeDuplicates(int[] nums) {
int count = 0;
int len = nums.length;
if(len==0) return 0;
int pre = 0;
int cur = 0;
while(cur<len){
if(nums[cur]==nums[pre]){
cur++;
}else{
nums[count++] = nums[pre];
if(cur-pre>=2){
nums[count++] = nums[pre];
}
pre = cur;
}
}
nums[count++] = nums[cur-1];
if(cur-pre>=2){
nums[count++] = nums[cur-1];
}
return count;
}
}