Sunday, May 28, 2017

80. 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 1122 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;
    }
}