删除有序数组中重复项python
时间: 2025-03-16 22:13:37 浏览: 49
### 删除有序数组中的重复项
对于删除有序数组中的重复项,可以采用双指针方法来优化时间效率和空间复杂度。以下是基于 Python 的实现:
#### 方法描述
通过两个指针 `slow` 和 `fast` 遍历数组。其中,`slow` 指向当前有效部分的最后一个位置,而 `fast` 负责遍历整个数组。当发现新的不同元素时,将其放置到 `slow` 所指向的位置,并移动 `slow`。
这种方法的时间复杂度为 \(O(n)\),空间复杂度为 \(O(1)\)[^3]。
#### 实现代码
```python
class Solution:
def removeDuplicates(self, nums: list[int]) -> int:
if not nums:
return 0
n = len(nums)
slow = 1
for fast in range(1, n):
if nums[fast] != nums[fast - 1]:
nums[slow] = nums[fast]
slow += 1
return slow
```
上述代码实现了从有序数组中移除重复项的功能。最终返回的是去重后的数组长度,同时原数组被修改以保留唯一值的部分。
---
如果数组不是有序的,则可以通过哈希表的方式解决此问题。具体做法如下:
#### 哈希表方法描述
利用字典或集合存储已经遇到过的元素,从而判断某个元素是否重复。该方法能够保证原始顺序不变,但需要额外的空间开销\(O(n)\)[^1]。
#### 实现代码
```python
def remove_duplicates_unsorted(nums: list[int]):
seen = set()
result = []
for num in nums:
if num not in seen:
result.append(num)
seen.add(num)
return result
```
以上函数适用于无序数组的情况,它会返回一个新的不含重复项的列表。
---
### 总结
- 对于 **有序数组**,推荐使用双指针技术,在线性时间内完成操作且无需额外内存。
- 如果面对的是 **无序数组** 或无法假设输入已排序的情况下,则应考虑借助辅助数据结构如哈希集合作业。
阅读全文
相关推荐



















