LeetCode双指针经典题目解析
LeetCode双指针经典题目解析
283. 移动零
解题思路
- 使用双指针技巧
- 左指针标记当前需要填充非零数的位置
- 右指针遍历数组寻找非零数
- 遇到非零数就交换两个指针位置的值
代码实现
1 | class Solution { |
11. 盛最多水的容器
解题思路
- 使用左右双指针向中间收缩
- 每次移动较短的那个边
- 计算过程中维护最大面积
- 面积计算:宽度(右指针-左指针)* 高度(两指针高度的较小值)
代码实现
1 | class Solution { |
15. 三数之和
解题思路
- 先将数组排序
- 固定第一个数,然后用双指针寻找另外两个数
- 注意去重处理:
- 固定数字时跳过重复值
- 左右指针移动时也要跳过重复值
- 优化:
- 当固定数字大于0时可以直接break
- 当和大于0时右指针左移,小于0时左指针右移
代码实现
1 | class Solution { |
42. 接雨水
解题思路
- 双指针法:
- 使用左右指针从两端向中间移动
- 维护左右两边的最大高度
- 较低的一边可以确定当前位置能接的雨水
- 移动较低的一边的指针
代码实现
1 | class Solution { |
评论