返回
从排序数组中删除重复项:LeetCode 解题指南
后端
2023-12-01 00:57:02
LeetCode - 从排序数组中删除重复项:终极攻略
LeetCode 题目概述:
给定一个排序数组 ,你需要原地删除重复项,使得每个元素只出现一次,并返回新数组的长度。
解题思路:
-
双指针法 :
- 设置两个指针:
i
和j
,指向数组的第一个元素。 - 遍历数组,指针
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
指向了最后一个不重复的元素的位置。
扩展阅读:
希望这篇文章能帮助你更好地理解这道题。