LeetCode(Python)—— 删除有序数组中的重复项(简单)
题目描述:
给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
输入:nums = [1,1,2]
输出:2, nums = [1,2]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。
示例 2:
输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5,并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。
解题思路:
由于题目要求我们在原地修改数组,因此我们不能使用额外的数组空间,需要使用双指针技巧来解决这个问题。我们可以使用快慢指针来遍历数组,快指针用于扫描数组,慢指针用于记录不重复的元素的位置。
具体来说,我们初始化快指针和慢指针都指向数组的第一个元素。如果快指针指向的元素和慢指针指向的元素相同,说明该元素重复,我们只需要将快指针继续向前移动即可。如果快指针指向的元素和慢指针指向的元素不同,说明该元素不重复,我们需要将该元素复制到慢指针的下一个位置,并将慢指针向前移动一步。
时间复杂度:O(n),其中 n 是数组的长度。
空间复杂度:O(1)。
Python 代码实现:
class Solution: def removeDuplicates(self, nums: List[int]) -> int: if not nums: return 0 # 定义快慢指针 slow = 0 for fast in range(1, len(nums)): # 如果快慢指针指向的元素不同,说明该元素不重复,将该元素复制到慢指针的下一个位置 if nums[fast] != nums[slow]: slow += 1 nums[slow] = nums[fast] # 返回新长度 return slow + 1
这道题目比较简单,可以通过双指针方法快速解决。
相关文章