尺取法总结

尺取法又称双指针法

• 题意
• 长度为 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的连续区间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值