设计一个线性算法,在 N 个长整数序列中找到最多为 M 的连续子序列,该序列在所有此类子序列中总和最大。实现您的算法,并确认其运行时间的增长顺序是线性的。
我已经读了几次,但我很难理解它要我做什么。
假设一行中有 10 个整数。您可以按顺序选择其中的任何 1,2 或 3 个并将它们相加。您需要找出您会选择哪些以使总和最大。在这种情况下,M=3,N=10。您的算法必须在线性时间内运行。
我认为它的意思是这样的(根据亚历克斯的回答):
N = 10
144 23 89 21 145 2 11 9 1 69
M = 3 (this is max)
take 1 number
highest is 145
take 2 numbers consequtive
highest is 144 + 23 = 167
take 3 numbers consequtive
highest is 144 + 23 + 89 = 256
Therefore answer = 144, 23, 89
负数或零包括:
N = 10
0 -23 -89 21 -145 -2 11 -1 1 69
M = 3 (this is max)
take 1 number
highest is 69
take 2 numbers consequtive
highest is 1 + 69 = 70
take 3 numbers consequtive
highest is -1 + 1 + 69 = 69
Therefore answer = 1, 69
请评论我是对还是错。
我找不到子序列中的数字计数可以小于 M 的情况。不管我怎么想,它必须是 M。*
只有窗口不需要总是包含 N 个整数中的最高值。
*
好的,我发现了一种计数小于 M 的情况。请参见上面的第二个代码块。