2012-11-13 99 views
2

设计一种线性算法,该算法在所有这些子序列中具有最高总和的N个长整数序列中发现大多数M的连续子序列。实现你的算法,并确认其运行时间的增长顺序是线性的。有人可以向我解释这是告诉我要做什么吗?

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

+3

什么是'它'?你的家庭作业?如果是这样,最好问问你的助教,而不是我们。 – bmargulies

+2

http://codercareer.blogspot.com/2012/02/no-33-maximums-in-sliding-windows.html –

+3

@TonyRad - 不完全。 OP给出_maximum_窗口大小。该链接假定给定的窗口大小。最佳尺寸可能会小于最大尺寸。 –

回答

6

假设你一行有10个整数。你可以依次选择其中的1,2或3个并添加它们。你需要找出你会选择哪一个,以便总和最大。在这种情况下,M = 3,N = 10。 您的算法必须以线性时间运行。

+1

此外,它需要在线性时间内运行,所以当您向该行添加更多整数时,比较次数应按比例增加。 – austin

+1

好点。我更新了答案。 –

+1

这对OP的问题现在是一个很好的答案:“这是什么意思?” –

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

+1

其正确。一个重要的细节是他们没有说整数必须是正数。 – goat

+1

哦,是的,也许我应该尝试混合使用负数和零。 – ADTC

相关问题