算法:从有序数组中移除重复的数据26. Remove Duplicates from Sorted Array
发布日期:2021-05-26 07:23:07 浏览次数:12 分类:精选文章

本文共 858 字,大约阅读时间需要 2 分钟。

要解决问题,我们需要在给定已经排序的数组中删除重复元素,并返回新的长度。以下是问题的详细分析和解决方案:

问题分析

  • 给定一个排序好的数组 nums,我们需要确保每个元素只出现一次,同时保持数组的有序性。
  • 修改必须在原地进行,这意味着不能分配额外内存去创建新的数组。
  • 返回值是一个整数,表示处理后数组的新长度。

方法思路

我们将使用两个指针来解决问题:

  • 记录前一个元素pre 记录处理过的元素,避免重复。
  • 遍历数组:从第二个元素开始,逐个检查是否重复。
  • 修改数组:当发现一个不同于 pre 的元素时,将其赋值给当前结果位置,并更新 pre 和索引。
  • 解决代码

    public class Solution {    public int removeDuplicates(int[] nums) {        if (nums == null || nums.length == 0)            return 0;        int pre = nums[0];        int index = 1;        for (int k = 1; k < nums.length; k++) {            if (nums[k] != pre) {                nums[index++] = nums[k];                pre = nums[k];            }        }        return index;    }}

    代码解释

  • 边界检查:首先检查数组是否为空,如果是则返回0。
  • 初始化变量pre 记录第一个元素,index 记录结果数组的位置从1开始。
  • 遍历数组:从第二个元素开始遍历,如果元素与 pre 不同,则将其赋值给当前结果位置,并更新 pre
  • 返回索引:遍历结束后返回 index,表示处理后的新长度。
  • 这种方法在 O(n) 时间复杂度内完成任务,且在 O(1) 内外存,因此是高效且节省内存的。

    上一篇:JavaScript基本语法(三)
    下一篇:极客大学产品经理训练营 产品思维和产品意识 解决方案的设计与积累 作业3

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年04月16日 18时23分36秒