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.

public class Solution {
    public int removeDuplicates(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
// Result keeps track of length to return.
// cur points to the tail of the array processed.
// Only when nums[i] == nums[i - 1] && nums[cur] == nums[cur - 1] && cur > 0, i++ without adding nums[i] to the processed array.
        int result = 1;
        int cur = 0;
        for (int i = 1; i < nums.length; i++) {             if (nums[i] == nums[i - 1]) {                 if (cur > 0) {
                    if (nums[cur] == nums[cur - 1]) {
                        continue;
                    }
                }
            }
            cur++;
            result++;
            nums[cur] = nums[i];
        }
        return result;
    }
}
Advertisements