美文网首页
LeetCode:26. 删除有序数组中的重复项

LeetCode:26. 删除有序数组中的重复项

作者: alex很累 | 来源:发表于2022-02-03 20:59 被阅读0次

问题链接

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

问题描述

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

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

示例

输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4

解题思路

我认为这道题和283. 移动零在一定程度上有些类似。
如果不限制“原地对数组进行操作”的话,我们可以创建一个数组,遍历原数组即可得到答案。
仔细阅读题目还可以发现有一个助力:有序数组=》重复元素必定连续

我们可以这样来完成这道题目:

  1. 我们原本想创建一个新的数组来排放不重复的数,现在我们直接把数放到旧数组中,用一个变量length来记录“新数组”的长度;
  2. 如何获得新数组呢?我们直接遍历老数组,从第1位开始(第0位不需要管),判断是否和前面的数相同,如果相同,继续遍历;如果不同,这就是一个新数,放到数组的第length位置上,同时,length++

代码示例(JAVA)

class Solution {
    public int removeDuplicates(int[] nums) {
        int length = 1;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] != nums[i - 1]) {
                nums[length++] = nums[i];
            }
        }
        return length;
    }
}

执行结果

相关文章

网友评论

      本文标题:LeetCode:26. 删除有序数组中的重复项

      本文链接:https://www.haomeiwen.com/subject/bbmrkrtx.html