当我们遇到双指针的时候,有些简单的我们可能会写,但一遇到难点的却又无从下手,那是因为我们没有理解双指针的性质。
有时候我们写双指针的题,为什么我们不会遗漏一些情况呢,下面我就来讲一下双指针的缩减搜索空间。
我们可以参考力扣上的例题来理解这个问题:
该题的约束条件为 i < j 时,那么我们可以取正方形的右上部分
那么当(i,j) 为(1,6)的时候,A[i] + A[j] > target ,因为 i 是从上到下依次递增的,因为A[1] + A[6] > target,那么A[2] + A[6] > target、A[3] + A[6] > target....... 所以就只能动 j 那么 j 就向前移动一位。
同样的思路,我们来看只动 i 的情况,按照上一个计算当我们计算到了第二阶段,sum = A[1] + A[5] ,如果sum < target, 那么当我们移动 j 的时候,因为 sum = A[1]+A[5], 那么sum < A[1] + A[4]、sum < A[1] + A[3] ........ 所以无论怎么移动 j 都无法得到结果。所以,只能移动 i ,那么我们就将 i 进行加一。
颜色的红色的深度表示两个数之和的大小
依次类推,我们总能得到一个最终结果值,那么我们就得到了那个值。