Leetcode 0027.Remove Element(python)
27. Remove Element
你选用何种方法解题?
本题的核心是原地移除数组中等于给定值的元素。
| 方法 | 时间复杂度 | 空间复杂度 | 是否推荐 |
|---|---|---|---|
| 快慢指针 | O(n) | O(1) | 推荐 |
方法选择理由:
- 快慢指针:只需一次遍历,空间复杂度 O(1)
解题过程
问题分析
输入:数组 nums,目标值 val
输出:移除目标值后的数组长度
关键约束:
- 原地修改数组,不能使用额外空间
- 不需要保持元素顺序
核心洞察
- 双指针技巧:使用两个指针,一个指向待填位置,另一个遍历数组
- 原地修改:直接在原数组上进行修改
算法流程
以 nums = [3,2,2,3], val = 3 为例:
1 | 初始化: num = 0(指向待填位置) |
这些方法具体怎么运用?
方法:快慢指针(推荐)
核心逻辑:
- 初始化指针:
num = 0(指向待填位置) - 遍历数组:从索引 0 开始遍历
- 判断条件:如果
nums[i] != val,将元素复制到nums[num] - 更新指针:
num += 1 - 返回结果:返回
num(数组长度)
边界情况处理:
| 边界情况 | 处理方式 |
|---|---|
| 空数组 | 直接返回 0 |
| 所有元素都等于 val | 直接返回 0 |
| 没有元素等于 val | 返回原数组长度 |
复杂度
| 方法 | 时间复杂度 | 空间复杂度 | 说明 |
|---|---|---|---|
| 快慢指针 | O(n) | O(1) | n 是数组长度 |
总结与最佳选择
最快算法:快慢指针。唯一的方法,时间效率高,空间效率好。
Code
方法:快慢指针(推荐)
1 | from typing import List |
方法二:双指针(更简洁写法)
1 | from typing import List |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.

