删除排序数组中的重复项

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

    public static int removeDuplicates(int[] nums) {
        if (nums.length == 0 || nums == null) return 0;
        int writeIndex = 1;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] != nums[i - 1]) nums[writeIndex++] = nums[i];
        }
        return writeIndex;
    }

Tips:

  • 不是考虑去将后面所有元素左移,而是考虑Overwrite
  • 不需要担心数组的有序性,完全没有问题
  • writeIndex记录的是下一个需要被覆盖的元素!

更新下通用代码,用更明显的双指针(这里是同向双指针)来写代码,其实前面那个就是双指针,一个是writeIndex,一个是for循环中的变量i

    public int removeDuplicates(int[] nums) {
        if (nums.length == 0 || nums == null) return 0;
        int slow = 0, fast = 1;
        while (fast < nums.length) {
            if (nums[fast] != nums[slow]) {
                nums[++slow] = nums[fast];
            }
            fast++;
        }
        // 长度为索引 + 1
        return slow + 1;
    }

Tips:

  • 我们让慢指针 slow 走左后面,快指针 fast 走在前面探路,找到一个不重复的元素就告诉 slow 并让 slow 前进一步。这样当 fast 指针遍历完整个数组 nums 后,nums[0..slow] 就是不重复元素,之后的所有元素都是重复元素。(来自labuladong)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容