举个栗子看张图就可以懂了www

给定长度为n的数列整数a0,a1,a2,a3 ….. an-1以及整数S。求出综合不小于S的连续子序列的长度的最小值。如果解不存在,则输出0。(10<n<10^5,0<ai<10^4,S<10^8)

这里我们拿第一组测试数据举例子,即 n=10, S = 15, a = {5,1,3,5,10,7,4,9,2,8}

img这幅图便是尺取法怎么“取”的过程了。

整个过程分为4步:

1.初始化左右端点

2.不断扩大右端点,直到满足条件

3.如果第二步中无法满足条件,则终止,否则更新结果

4.将左端点扩大1,然后回到第二步

用尺取法来优化,使复杂度降为了O(n)。

最后,再给一个尺取法的定义以便更好理解:返回的推进区间开头和结尾,求满足条件的最小区间的方法称为尺取法。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

组合数学 Previous
java相关 Next