2

设计一个线性算法,在 N 个长整数序列中找到最多为 M 的连续子序列,该序列在所有此类子序列中总和最大。实现您的算法,并确认其运行时间的增长顺序是线性的。

我已经读了几次,但我很难理解它要我做什么。

4

2 回答 2

6

假设一行中有 10 个整数。您可以按顺序选择其中的任何 1,2 或 3 个并将它们相加。您需要找出您会选择哪些以使总和最大。在这种情况下,M=3,N=10。您的算法必须在线性时间内运行。

于 2012-11-13T01:49:11.177 回答
2

我认为它的意思是这样的(根据亚历克斯的回答):

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 的情况。请参见上面的第二个代码块。

于 2012-11-13T02:29:48.060 回答