查找最短子列表 > MAX 与查找最短子列表 <= MAX 相同,如果添加了之前或之后的项目,则子列表的总数超过 MAX: 使用[1,5,1,1,3,10,5,4,2,1]and MAX=20,[1,3,10]是一个子列表,包括10但自添加下一个后无效5总共给出19 < MAX. 第一个有效的子列表在这里[5,1,1,3,10]。
算法:
marker为找到的最短子列表的长度创建一个。
- 创建游标
left和right.
- 将两个光标设置为
N。
left向左移动while total(at left, ..., at N) <= MAX或left = 0。
- 如果
left > 0存储n - left + 1在marker. 转到 6。
right向右移动while total(at left, ..., at right) <= MAX或right = list.size - 1。
- 如果
right < list.size - 1存储right - left + 1在marker.
- 否则:返回
list.size。
- 循环
while left < N and right < list.size - 1:
left向右移动一位。
- 测试项目
at right + 1,如果有的话。
- 如果
total + at right + 1 > MAX存储right - left + 1在marker.
- 否则向右移动一个。
无论如何,我会给霍华德答案。