尺取法又称双指针法
• 题意
• 长度为 n 的数组,每个数均为正整数
• 给出正整数 S,要求 O(n) 内求出长度最小的连续区间,
使 S ≤ 区间和
• 样例
• [1 2 3 4 5],S = 11
•[1 2 3 4 5],11 ≤ 3 + 4 + 5 ,答案为 3
具体流程;
- 维护双指针L、R,初始L = R =1,sum = a[L]
- 当sum >= S是,符合要求,用 (R - L+1)更新答案,且L++,若L=R,L++,R++
- 当sum < S时不符合要求,R++
根据算法流程可知
• 左端点 L 能够遍历到区间中的所有点
• 对于每个左端点 L 所形成的最终区间 [L,R]
• sum[L~R] 如果小于 S,则令R右移
• sum[L~R] 如果大于等于S,此时 sum[L~R] ≥ S,sum[L~(R-1)] < S
对于一个左端点 L ,最后找到的一个区间 [L,R] ,R是满足条件的最小值
• 因此答案区间一定会在上述尺取流程中出现
什么时候用尺取法?
• 所求解答案为一个连续区间
• 对于一个左端点 L, [L,n] 的区间是否满足条件是单调的
经典例题;
长度最小的区间和 >= S的连续区间
969

被折叠的 条评论
为什么被折叠?



