返回

从排序数组中删除重复项:LeetCode 解题指南

后端

LeetCode - 从排序数组中删除重复项:终极攻略

LeetCode 题目概述:

给定一个排序数组 ,你需要原地删除重复项,使得每个元素只出现一次,并返回新数组的长度。

解题思路:

  1. 双指针法

    • 设置两个指针:ij,指向数组的第一个元素。
    • 遍历数组,指针j逐个向右移动,直到找到一个与i指向的元素不同的元素。
    • j指向的元素赋值给i+1的位置。
    • 继续遍历数组,直到j到达数组尾部。
    • 返回i+1,表示新数组的长度。

示例代码(Java):

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

示例代码(Python):

def removeDuplicates(nums):
    i = 0
    for j in range(1, len(nums)):
        if nums[j] != nums[i]:
            i += 1
            nums[i] = nums[j]
    return i + 1

复杂度分析:

  • 时间复杂度:O(n),其中n为数组的长度。
  • 空间复杂度:O(1),因为我们原地修改了数组,没有使用额外的空间。

注意事项:

  • 因为数组是排序的,所以我们可以使用双指针法来解决这个问题。如果数组没有排序,我们需要先对数组进行排序,然后再使用双指针法。
  • 我们可以通过检查nums[i]nums[j]是否相等来判断它们是否是重复元素。如果它们相等,则将j指向下一个元素,继续检查下一个元素。
  • 我们需要使用i+1作为新数组的长度,因为i指向了最后一个不重复的元素的位置。

扩展阅读:

希望这篇文章能帮助你更好地理解这道题。