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

Algorithm 如何在缩短大小时保持数组中的最大值,algorithm,Algorithm,假设我们有一个大小为n的数组A[0:n-1]和一个保持A[i:n-1]最大值的int maxelm,其中i在开始时初始化为0,然后在每个步骤中加1 那么,如何在O(n)的时间复杂度下保持这个最大值呢?一个简单的方法是在每个步骤中搜索[i:n-1]中的最大值,因此当我从0到n-1时,我们必须进行(n-1)+(n-2)+…+0=O(n^2)次搜索,这看起来太耗时了。与此方法相比,有谁知道更好的算法吗?您已经计算了[i..n-1],那么您不需要再次重新考虑[i..n-1]中的[i..n-1]中的所有值

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


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

您已经计算了
[i..n-1]
,那么您不需要再次重新考虑
[i..n-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\u from[i]
==>元素中的最大值
A[i]、[i+1]、…、A[n-1]

提供您正在使用的语言和您尝试过的内容。堆栈溢出是针对特定的编程问题,而不是理论情况。明白了。下次将附加代码。谢谢