删除有序数组中的重复项

删除有序数组的重复项

1,题目

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

2,思路

使用双指针的思想进行解答,快指针(fast)进行循环遍历数组,慢指针(left)来记录真正数组的长度。题目中是有序数组,且重复数字不能超过3个。由于有序,重复数字必然连续,且前两个数必然保留。快慢指针从第3个开始。
使用nums[left-2] 和 nums[fast] 比较,不相等则fast指针有效,slow是结果数组的指针,不相等时为有重复值,需要慢指针不动,快指针移动,慢指针的位置就是存在重复值的位置,快指针找到下一个满足条件的值时,赋值给慢指针,并移动慢指针,解决问题。

3,代码

class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        int left = 2;
        int fast = 2;

        while(fast<n){
            if(nums[left -2] != nums[fast]){
                nums[left] = nums[fast];
                left++;
            }

            fast++;
        }

        return left;
        
    }
}
posted @ 2024-10-28 22:31  z_coding  阅读(15)  评论(0)    收藏  举报