这个算法的复杂度是多少?

What is the complexity of this algorithm

本文关键字:多少 复杂度 算法      更新时间:2023-10-16

该算法以一个整数向量作为输入,首先存储最大值,让它在数组中的位置保持为p,然后将最大值元素存储在[p, n]等范围内。

// input v[0]...v[n-1] is a vector of integers already filled.
// output : stack s 
stack<int> s;
for(auto x: v){
     while(!s.empty() && x > s.top()) s.pop();
     s.push(x);
}

我无法找出最坏的情况,但似乎算法是线性的,因为while()工作越多,堆栈大小就会减少,使未来的工作非常便宜。

最坏情况

你的程序将在堆栈的底部拥有最大值。执行第N次push()操作。在最坏的情况下,你要pop() N-1次。(因为你不能弹出超过N-1次,否则你的堆栈将是空的,这违反了程序的目的)。

最好情况下

最好的情况是当向量v的第一个元素的最大值时,您仍然执行N个push()操作,并且永远不会执行任何pop()操作。

所以在一天结束时,无论向量V中的任何数据,它都将在线性时间执行