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;
}

results matching ""

    No results matching ""