AB103-顺序表去重¶
切片为AB38
+哈希表(仅适用于数值范围有限)
代码实现¶
算法执行过程图解¶
假设顺序表为:[1, 2, 2, 3, 2, 3, 4]
更高效的实现方式¶
方法1:单次遍历去重(有序表)¶
方法2:使用哈希表(适用于无序表)¶
用空间换时间
方法3:先排序再去重¶
| C | |
|---|---|
复杂度分析¶
原始算法复杂度¶
时间复杂度:O(n²)¶
详细分析:
- 外层循环:执行 n 次
- 内层循环:
- 第1轮:比较 n-1 次
- 第2轮:比较 n-2 次
- ...
- 第n轮:比较 0 次
- 总比较次数:
Text Only - 时间复杂度:O(n²)
空间复杂度:O(1)¶
- 只使用了常数个额外变量
- 原地操作,空间复杂度为 O(1)
优化算法复杂度¶
时间复杂度:O(n)¶
- 只需要一次遍历
- 每个元素只访问一次
- 时间复杂度为 O(n)
空间复杂度:O(1)¶
- 仍为原地操作
- 空间复杂度为 O(1)
关键知识点延伸¶
1. 算法思想对比¶
| 方法 | 时间复杂度 | 空间复杂度 | 适用场景 |
|---|---|---|---|
| 原始方法 | O(n²) | O(1) | 保持原顺序 |
| 单次遍历 | O(n) | O(1) | 保持原顺序 |
| 哈希表 | O(n) | O(n) | 无序表 |
| 排序去重 | O(n log n) | O(1) | 可改变顺序 |
2. 稳定性分析¶
- 原始算法:保持相对顺序,稳定
- 优化算法:保持相对顺序,稳定
- 哈希表方法:可能改变顺序,不稳定
- 排序方法:改变顺序,不稳定
3. 边界情况处理¶
4. 扩展应用¶
4.1 保留最后一个重复元素¶
4.2 删除所有重复元素(包括第一个)¶
5. 与链表去重的比较¶
算法特点总结¶
原始算法特点:¶
- 保持原序:维持元素的原始相对顺序
- 原地操作:不需要额外存储空间
- 时间开销大:重复比较导致效率低下
- 逻辑清晰:容易理解和实现
优化算法特点:¶
- 高效性:时间复杂度从O(n²)优化到O(n)
- 稳定性:保持元素相对顺序
- 简洁性:代码更加简洁
- 实用性:更适合实际应用
记忆要点¶
- 原始方法:双重循环,外层固定基准,内层筛选不同元素
- 优化思路:利用已排序特性,单次遍历即可完成
- 核心思想:维护写入位置,只保留与前一个不同的元素
- 时间优化:从O(n²)到O(n)的巨大提升
- 适用前提:假设输入数组是有序的(这是优化的关键)