假设我们有一个大小为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)次搜索,看起来太费时间了。有没有人比这种方法知道更好的算法?
答案 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]