如何在缩短大小时保持数组中的最大值

时间:2015-09-06 01:35:00

标签: algorithm

假设我们有一个大小为n的数组A [0: n -1]和一个int maxElem ,它保持A [ i <的最大值/ em>: n -1],其中 i 在开始时初始化为0,然后在每一步中加1。

那么如何在 O(n)的时间复杂度中维护 maxElem ?一个简单的方法是在每个步骤中搜索A [ i n -1]中的最大值,以便从0变为 n -1,我们必须做( n -1)+( n -2)+ ... + 0 = O(n ^ 2)次搜索,看起来太费时间了。有没有人比这种方法知道更好的算法?

1 个答案:

答案 0 :(得分:1)

您已经计算了[i..n-1],那么您不需要再次重新考虑[i .. n-1][i-1 i ... n-1]中的所有值。所以更好的算法是

+ get an array max_from[0..n-1]
+ set i=n-1;
+ max_from[n-1]= A[n-1];
+ for i=n-2 downto 0
    if(A[i]>max_from[i+1])
      max_from[i]=max_from[i+1];
    else
      max_from[i]=A[i];

Time_comlexity-O(n) Space-complexity-O(n)

max_from[i] ==&GT;元素A[i],A[i+1],...,A[n-1]

中的最大值