双指针的原理与题单
原理
双指针,本质上是从$O(n^2)$的搜索空间中排除掉不可能的范围,缩减到$O(n)$的复杂度。
参考:167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)
例题
2824. 统计和小于目标的下标对数目 - 力扣(LeetCode)
这一题中,我们既可以让i每次循环加1,j随之变化;也可以让j每次循环减1,i随之变化。
第一种思路:i每次循环加1,j随之变化
1 | class Solution: |
第二种思路:j每次循环减1,i随之变化
1 | class Solution: |
另外,如果求的是$abs(nums[i]-nums[j])$大于或者小于target的数量,初始时要设置为i=0,j=1
或i=len(nums)-2,j=len(nums)-1
双指针题单:
167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)
15. 三数之和 - 力扣(LeetCode)
18. 四数之和 - 力扣(LeetCode)
611. 有效三角形的个数 - 力扣(LeetCode)
16. 最接近的三数之和 - 力扣(LeetCode)
2824. 统计和小于目标的下标对数目 - 力扣(LeetCode)
缩减搜索范围题单:
240. 搜索二维矩阵 II - 力扣(LeetCode)
11. 盛最多水的容器 - 力扣(LeetCode)