删除有序数组中的重复项
Remove Duplicates from Sorted Array
本机进度仅保存在当前浏览器
题目描述
给你一个升序排列的数组 nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回新长度。要求空间复杂度为 O(1)。
示例:nums = [0, 0, 1, 1, 1, 2],输出长度 3,前三个元素为 [0, 1, 2]。
解题思路
- 数组有序,所以重复元素一定相邻,这是本题能用快慢指针的前提。
- 慢指针左侧始终是「已去重的前缀」;快指针遇到与前一保留元素不同的新值时,把它追加到慢指针处。
- 第一个元素必然保留,因此慢指针从 1 开始。
参考实现
查看参考实现Python · 建议先自行作答
def removeDuplicates(nums):
if not nums:
return 0
# slow 左侧区间为已去重前缀
slow = 1
for i in range(1, len(nums)):
if nums[i] != nums[slow - 1]:
nums[slow] = nums[i]
slow += 1
return slow