反复地推进区间的开头和末尾,来求取满足条件的最小区间的方法被称为尺取法。
时间复杂度O(n)。
尺取法通常适用于选取区间有一定规律,或者说所选取的区间有一定的变化趋势的情况,通俗地说,在对所选取区间进行判断之后,我们可以明确如何进一步有方向地推进区间端点以求解满足条件的区间,如果已经判断了目前所选取的区间,但却无法确定所要求解的区间如何进一步得到根据其端点得到,那么尺取法便是不可行的。首先,明确题目所需要求解的量之后,区间左右端点一般从最整个数组的起点开始,之后判断区间是否符合条件在根据实际情况变化区间的端点求解答案。
实际操作步骤:
1.初始化左右端点,到2;
2.不断扩大右端点,直到满足条件,到3;
3.如果第二步中无法满足,则中止(已到最后,无法再更新),否则更新结果,并到4;
4.将左端点+1,回到2;
图例为求解总和不小于S的连续子序列的长度的最小值的尺取法实际过程。
S=15。
代码实现:
int l=0,r=0;//1。
while(l<=r&&r<n)
{
if(满足)
{
……//更新
l++;
}
r++;
}
写法有很多,看具体情况实现