删除排序数组的重复项
一.题目
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
二.题目理解
1.题目已经说明是排序数组,不需要再排序
2.原地修改删除,不要使用额外数组,说明我们要在数组内进行覆盖删除,不用考虑新的数组长度
三.python实现
用双指针,一个是跟踪原始数组中的当前元素,另一个则是唯一的元素。用唯一元素外前覆盖。跟踪当前元素的指针又称为快指针,它的位置总是比慢指针(跟踪唯一元素的指针)快至少一个位置,所以可以通过==nums[i+1] = nums[j]==拷贝覆盖
如果直接删除要从后往前不能从前往后,因为退出循环需要判断len(nums),从前往后修改数组可能会修改数组长度,从而影响算法
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
i = 0
for j in range(1, len(nums)):
if nums[i] != nums[j]:
nums[i+1] = nums[j]
i += 1
return i+1
本文讲解如何在不使用额外空间的情况下,对已排序数组进行原地修改,删除重复元素,保持元素唯一性,并返回新数组长度。采用双指针技巧,通过比较快慢指针指向的元素来达到目的。
412

被折叠的 条评论
为什么被折叠?



