26. 删除排序数组中的重复项(高频题)


26. 删除排序数组中的重复项

题目

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
在这里插入图片描述

解题思路

因为数组是有序的,所以相同的元素肯定在一起,我们只需要用快慢指针,来遍历数组,快指针走在前面探路,遇到不重复的元素就赋值给slow的位置。

对于数组相关的问题,一般都避免在数组中间删除元素,都会先想办法把元素移动到数组末尾,然后再删除

在这里插入图片描述

代码

class Solution {
    public int removeDuplicates(int[] nums) {
        int n=nums.length;
        if(n==0){
            return 0;
        }
        int slow=0; 
        int fast=0;
        while(fast<n){
            //遍历完后nums[0..slow]就是无重复的元素了

            //只把不重复的元素赋给nums[slow]
            if(nums[fast]!=nums[slow]){
                slow++;
                nums[slow]=nums[fast];
            }
            fast++;
        }

        //长度 比下标大1
    return slow+1;    
    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录