这个算法的复杂度是多少?
What is the complexity of this algorithm
该算法以一个整数向量作为输入,首先存储最大值,让它在数组中的位置保持为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中的任何数据,它都将在线性时间执行
相关文章:
- while循环中while循环的时间复杂度是多少
- 函数的时间复杂度是多少?
- C++中 std::map 的运行时复杂度是多少?
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 此print_star函数的运行时复杂度是多少?
- 给定C++代码的时间复杂度是多少?
- 将数组的元素插入映射的时间复杂度是多少?
- 以下递归代码的时间复杂度是多少?
- C++ 中 std::map 的空间复杂度是多少?
- 在C++中修改字符串的BigO时间复杂度是多少
- 这个算法的运行时间复杂度是多少?你是如何分析的
- 此特定代码的时间复杂度是多少?
- % 运算符的时间复杂度C++是多少?
- 三和算法的时间复杂度是多少
- 以下代码片段的时间复杂度是多少?
- 用于搜索的给定代码的时间复杂度是多少
- 我的代码的空间复杂度是多少
- std::map的时间复杂度是多少
- 遍历二维数组的时间复杂度是多少
- 这个代码(来自leetcode)的时间复杂度是多少