算法—删除有序数组重复项

2023-12-21 06:56:49

1. 每个元素出现一次

给你一个 非严格递增排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

力扣链接①

    public int removeDuplicates(int[] nums) {
        // 快慢指针
        int slow = 1;
        for (int fast =  1; fast < nums.length; fast++){
            if(nums[fast] != nums[slow - 1]){ // fast-1 也可
                nums[slow++] = nums[fast];
            }
        }
        return slow;
    }

2. 每个元素出现两次

给你一个有序数组 nums ,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。

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

力扣链接②

	public int removeDuplicates(int[] nums) {
        if(nums.length <= 2){
            return nums.length;
        }
        // 快慢指针
        int slow = 2;
        for (int fast = 2; fast < nums.length; fast++){
            if(nums[fast] != nums[slow - 2]){
                nums[slow++] = nums[fast];
            }
        }
        return slow;
    }

文章来源:https://blog.csdn.net/weixin_44465396/article/details/135105454
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。