Leetcode 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 1, 1, 2, 2 and 3. It doesn't matter what you leave beyond the new length.

题意:有一个已经排序好的数组,如果数组中每个元素最多允许出现两次,按条件更新数组,并返回更新后的数组有效长度。

思考:这是一道followup题目,由于最多允许出现两次,所以可以增加一个计数器来检测目前是否重复次数是否已达到两次。用一个指针prePtr记录目前更新到的位置,一个游标指针来遍历数组。如果游标和游标前面的值不相等,右移prePtr并更新值;如果相等,并且重复的次数小于2,则prePtr还是可以右移并更新值的,如果次数已经大于等于2,需要等待下一个不同的值才能右移prePtr。

public int removeDuplicates(int[] nums) {
    if (nums == null || nums.length == 0) {
        return 0;
    }

    int prePtr = 0;
    int cnt = 1;
    for (int i = 1; i < nums.length; i++) {
        if (nums[i] != nums[i-1]) {
            nums[++prePtr] = nums[i];
            cnt = 1;
        } else {
            if (cnt < 2) {
                nums[++prePtr] = nums[i];
            }
        }
    }

    return prePtr + 1;
}

bug:自己做的时候比较的是游标和prePtr处的值是否相等,并且用一个布尔标志而不是计数器,在[1,1,1,1,3,3]这个case下就无法通过。因为和自己之前的元素进行比较才知道是不是连续重复。

你可能感兴趣的:(Leetcode 80. Remove Duplicates from Sorted Array II)