如何使程序的运行时间为Θn

时间:2017-02-08 01:54:39

标签: algorithm loops time-complexity pseudocode

要求是输入将设置为-5到5之间的整数,结果应该给出整数的最长子集,其中总数必须大于或等于零。

我只能想出以下内容: 输入将输入[0到n]

let start, longestStart, end, longestEnd, sum = 0

for i=0 to n-1
start = i
sum = input[i]
  for j=1 to n
  if sum + input[j] >= 0 then 
    end=j;
  if end - start > longestEnd - longestStart then
    longestStart = start;
    longestEnd = end;

然而,这是Θ(n ^ 2)。我想知道使这个循环成为Θ(n)的方法是什么 谢谢

1 个答案:

答案 0 :(得分:0)

由于

a - b == (a + n) - (b + n)

对于任何a,b或n,我们可以将其应用于数字数组,使所有元素的运行总数从0保持为当前。根据上式,从索引a到b的任何子阵列的总和是sum(元素0-b) - sum(元素0-a)。

通过跟踪局部最小值和最大值及其总和,可以找到一次通过范围最大的子阵列,即O(n)。