返回工具主页

数组去重算法演示

可视化展示原地数组去重过程:以 a[i] 为基准,用 j 扫描后续元素,把不重复的元素依次写到 a[r] 位置。

时间复杂度:O(n²) | 空间复杂度:O(1) | 会改变原数组顺序

数组可视化

红色虚线右侧表示当前有效长度 n 之外
i 基准位置 j 扫描位置 r 写入位置 源 / 目标
点击“开始去重”观察原地去重过程。

操作控制

0
比较次数
0
复制次数
-
唯一元素数

去重算法代码

def remove_duplicates(a):
n = len(a)
i = 0
while i < n:
r = i + 1
for j in range(i + 1, n):
if a[j] != a[i]:
a[r] = a[j]
r += 1
n = r
i += 1
return a[:r]

每一轮以 a[i] 为基准,保留其后首次出现的不同元素,并压缩到前面。内层循环结束后,有效长度 n 更新为 r,继续下一轮。