Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
What if duplicates are allowed at most twice?
For example,
Given sorted array nums =
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.Solution:
We use two pointers.
One points to the candidate.
The other pointer i points to the position that can be updated.
If we find the candidate is larger than nums[i - 2], it means we have at most two duplicates of nums[i - 2] and we can put the candidate in position i.
Code:
public class Solution { public int removeDuplicates(int[] nums) { int i = 0; for (int n : nums) { if (i < 2 || n > nums[i - 2]) { nums[i++] = n; } } return i; } }