javascript - 单调堆栈问题的时间复杂度
问题描述
据我了解,此代码的时间复杂度为 O(N) for 循环只会迭代一次,因此时间复杂度占 O(N) 但 for 循环内有一个 while 循环
所以在for循环里面嵌套了一个while循环为什么我们忽略它的时间复杂度呢?
var dailyTemperatures = function(temperatures) {
let result = new Array(temperatures.length).fill(0);
let stack = [];
for(let i = 0; i < temperatures.length; i++) {
while(stack.length > 0 && temperatures[i] > temperatures[stack[stack.length - 1]]) {
let index = stack.pop();
console.log('hello');
result[index] = i - index;
}
stack.push(i);
}
return result;
};
解决方案
因为while循环只是一个一个地弹出堆栈元素,并且在堆栈内推入的元素不能超过N个(每个元素推入一次)。因此,即使 while 循环嵌套在 for 循环中,它也不会执行超过 N 次。
推荐阅读
- powerbi - 如何使用powerbi从LinkedIn中提取工作信息
- lua - 检查玩家是否在 roblox 中有工具的副本
- javascript - 服务工作者缓存与内存缓存
- reactjs - 何时使用 NextJS API 路由?
- javascript - 获取每个元素的第一个锚点的 href 值
- ethereum - 未捕获(承诺中)错误:返回错误:执行恢复
- php - 如何在下面的代码中利用 preg_replace for xss?
- javascript - 如何在反应中多选的所有选项中插入复选框?
- android - 数据库参考仅通过 URL 起作用
- django - Docker django 项目中的 FileNotFoundError 即使文件存在