Remove Duplicates from Sorted Array II
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.
Tips:
两种解法一种直白一种绕一点,都是O(n)
Code:
直白:
public class Solution {
public int removeDuplicates(int[] nums) {
int n = nums.length;
if (n <= 2) return n;
int repeat = 0, count = 1;
for (int i = 1; i < n; ++i) {
if (nums[i] == nums[i-1] && repeat < 1) {
nums[count++] = nums[i];
repeat++;
}
else if (nums[i] > nums[i-1]) {
nums[count++] = nums[i];
repeat = 0;
}
}
return count;
}
}
Stephen大神:
public int removeDuplicates(int[] nums) {
int i = 0;
for (int n : nums)
if (i < 2 || n > nums[i-2])
nums[i++] = n;
return i;
}