February 18, 2019

80. Remove Duplicates from Sorted Array II

80. Remove Duplicates from Sorted Array II

同向双指针。Time: O(n), Space: O(1)

class Solution {
    public int removeDuplicates(int[] nums) {
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if (j == 0 || j == 1 || nums[i] != nums[j - 2]) {
                nums[j++] = nums[i];
            }
        }
        return j;
    }
}

旧写法:

指针 i 遍历整个数组;
指针 j 指向下一个遇到的数放在什么位置,j 之前的数组是已经确定的,j 向右移动的条件是不满足当前数字和 j 左边两位数字重复。

class Solution {
    public int removeDuplicates(int[] nums) {
        int i = 0;
        int j = 0;
        while (j < nums.length) {
            if (j == 0 || j == 1) {
                nums[i++] = nums[j++];
            } else if (nums[j] == nums[i - 2]) { // 这里的条件是 nums[j] == nums[i - 2]
                j++;
            } else {
                nums[i++] = nums[j++];
            }
        }
        return i;
    }
}
class Solution:
    def removeDuplicates(self, nums: 'List[int]') -> 'int':
        if not nums or len(nums) < 3:
            return len(nums)
        # i: 遍历整个数组
        # j 的物理意义:下一个遇到的数放在什么位置
        # j 之前的数组是已经确定的
        j = 2
        for i in range(2, len(nums)):
            if nums[j - 1] != nums[i] or nums[j - 2] != nums[i]:
                nums[j] = nums[i]
                j += 1
                
        return j
comments powered by Disqus