双指针
双指针
刷题
88. 合并两个有序数组
1 | class Solution: |
125. 验证回文串
1 | class Solution: |
同向双指针(快慢)
283. 移动零
- 同向快慢双指针:快指针每次循环走一步,当快指针遇到非0元素时,慢指针走一步,并且此时交换快慢指针的元素,否则慢指针不移动
1 | class Solution: |
26. 删除有序数组中的重复项
- 数组非严格递增,原地删除重复元素,返回删除后的数组长度
- 思路:快慢指针,如果nums[low] != nums[fast]则 慢指针右移一步,并交换nums[low],nums[fast] = nums[fast],nums[low],快指针每次循环右移一步。
- 注意:fast += 1应该写在if后面,否则会出现溢出错误
- 最后,low指针左侧的元素为唯一项,返回数组长度low+1
1 | class Solution: |
27. 移除元素
1 | class Solution: |
相向双指针
167. 两数之和 II - 输入有序数组
- 数组下标从1开始,所以之后返回的双指针得要+1
- 数组非递减顺序排列
- 每个target只对应唯一的答案
- 空间要求O(1)
1 | # 时间复杂度O(N) |
15. 三数之和
- 因为题目没有说有序,先进行排序
1 | # 时间复杂度O(N^2);空间复杂度O(1) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Summer 自习室!