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

标签 algorithm

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

那么如何在 O(n) 的时间复杂度内维护这个 maxElem 呢?一个简单的方法是在每一步中搜索 A[i:n-1] 中的最大值,因此 i 从 0 到 n -1,我们必须做 (n-1)+(n-2)+...+0 = O(n^2) 次搜索,看起来太耗时了。有谁知道与此方法相比更好的算法吗?

最佳答案

您已经为 [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]==> 元素A[i],A[i+1],...,A[n-1]中的最大值

关于algorithm - 如何在缩短大小时保持数组中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32419209/

相关文章:

java - 在对象数组中搜索字符串

algorithm - 后缀相对于前缀表示法的好处

c# - 归并排序问题

algorithm - 像旅行商一样的问题

c# - 换色器功能的堆栈溢出错误

c# - 在 C# 中计算素数的最快方法?

c++ - 在 C++ 程序中以编程方式检测字节顺序

algorithm - 在不比较元素的情况下生成所有字典顺序排列

algorithm - 确定最后 "record"的最快方法 .. 理想情况下是并行的...(有间隙)

algorithm - 查找给定范围内所有数字的 XOR