力扣26——删除有序数组中的重复项

发布于:2025-05-10 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

1.题目描述:

2.算法分析:

3.代码展示:


1.题目描述:

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

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = [...]; // 输入数组
int[] expectedNums = [...]; // 长度正确的期望答案

int k = removeDuplicates(nums); // 调用

assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
    assert nums[i] == expectedNums[i];
}

如果所有断言都通过,那么您的题解将被 通过

示例 1:

输入:nums = [1,1,2]
输出:2, nums = [1,2,_]
解释:函数应该返回新的长度 2

示例 2:

输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5

2.算法分析:

  1. 初始化指针​​:

    • 使用一个指针 index 来表示当前不重复数组的末尾位置。初始时,index = 1,因为第一个元素(nums[0])肯定是不重复的。
  2. ​遍历数组​​:

    • 从第一个元素开始(i = 0),遍历到倒数第二个元素(i < nums.size() - 1)。
    • 比较当前元素 nums[i] 和下一个元素 nums[i + 1]
      • 如果它们不相等,说明 nums[i + 1] 是一个新的唯一元素,将其放到 nums[index] 的位置,然后 index 自增。
      • 如果它们相等,则跳过,继续检查下一个元素。
  3. ​返回结果​​:

    • 最终 index 的值即为去重后数组的长度。

3.代码展示:

int removeDuplicates(vector<int>& nums) {
    int index = 1;

    //开始遍历数组
    for (int i = 0; i < nums.size()-1; i++) {
        
        if (nums[i] != nums[i + 1]) {

            nums[index] = nums[i + 1];
            index++;
        }
    }



    return index;
}

26. 删除有序数组中的重复项 - 力扣(LeetCode)https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/


网站公告

今日签到

点亮在社区的每一天
去签到