[刷题班] LeetCode80. 删除有序数组中的重复项II

题目描述

思路:快慢指针

slow指针指向已经处理元素的下一个位置
因为数组有序,如果nums[fast] == nums[slow - 2],那么nums[fast] 肯定等于nums[slow - 1],那么此时这个数就出现了三次。此时slow保持不变,fast继续遍历。

关键:nums[fast] != nums[slow - 2]

方法一:

class Solution {
    public int removeDuplicates(int[] nums) {
        if (nums.length <= 2) return nums.length;
        // 从第三个元素开始
        int slow = 2, fast = 2;
        for (; fast < nums.length; fast ++) {
            if (nums[fast] != nums[slow - 2]) { 
                nums[slow] = nums[fast];
                slow ++;
            }
        }
        return slow;
    }
}
posted @ 2024-01-14 13:23  Ac_c0mpany丶  阅读(4)  评论(0编辑  收藏  举报