Advertisement

毛毛虫算法和尺取法

阅读量:

有这么一类问题,需要在给的一组数据中找到不大于某一个上限的“最优连续子序列”

由此衍生出一种特定的处理方式,寻找该子序列的过程类似于毛毛虫的移动轨迹,我将其称为毛毛虫算法,而这一方法在业界较为常见的称呼为“尺取法”。

就如同图中所展示的那位女子一般~

还是举个例子:

Poj3061

给出一个长度为n的数组以及一个整数m,要求找出总和不小于m的连续子序列,并确定其最小长度。

输入

n = 10,m = 15

5 1 3 5 10 7 4 9 2 8

输出

2

接下来我们使用sum变量来记录当前子序列的总和,从数组的第一个元素开始累加,直到该子序列的总和大于等于m时停止,并记录此时的长度。

实际上,在不满足条件的情况下将元素加入队列,然后计算队列的长度。随后将队首元素移除,并继续进行下一轮的添加操作,直到再次满足条件时再将该元素移出队列,并比较当前长度与之前记录的最短长度。当遍历至数组末尾仍无法满足条件时,整个过程结束。通过这样的方式可以在O(n)的时间复杂度内得到最终结果。

以下以样例为例进行演示,用毛毛虫的方式逐步移动,下划线部分表示当前“毛毛虫着地

全部评论 (0)

还没有任何评论哟~