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.
Subscribe to see which companies asked this question
Discuss
这道题需要在传入数组的基础上改成去重之后的。其实,当前有多少个不重复的元素,那么下一个不重复的元素直接覆盖到这个索引位就可以了。
我的AC代码
public class RemoveDuplicatesfromSortedArrayII {
/**
* @param args
*/
public static void main(String[] args) {
int[] a = { 1, 1, 1, 2, 2, 3 };
System.out.println(removeDuplicates(a));
int[] b = { 1, 1, 1, 1, 3, 3 };
System.out.println(removeDuplicates(b));
}
public static int removeDuplicates(int[] nums) {
if (nums.length == 0) {
return 0;
}
int sum = 1, cnt = 1, pre = nums[0];
for (int i = 1; i < nums.length; i++) {
if (pre == nums[i]) {
cnt++;
if (cnt <= 2) {
sum++;
nums[sum - 1] = nums[i];
}
} else {
pre = nums[i];
cnt = 1;
sum++;
nums[sum - 1] = nums[i];
}
}
return sum;
}
}