javascript - 如何计算包含可能在任何点终止的内部循环的代码片段的时间复杂度

标签 javascript time-complexity

如何计算下面代码片段的时间复杂度?

let count, barHeight, result = 1 << 31;
for(let i = 0; i < heights.length; i++) {
    count = 1;
    barHeight = heights[i];
    for(let j = i - 1; j >= 0; j--) {
        if (heights[j] >= barHeight) {
            count++;
        } else {
            break;
        }
    }

    for(let k = i+1; k< heights.length; k++) {
        if (heights[k] >= barHeight) {
            count++;
        } else {
            break;
        }
    }

    result = Math.max(result, count*barHeight);
}

基本上这个片段是计算任何索引i,计算heights数组中有多少个相邻索引不小于heights[i].

我有点困惑如何计算这种情况下的时间复杂度。 2 个内部循环可能会在任何点停止。

谢谢

最佳答案

它是二次O(n^2)

在评估时间复杂度时,您应该始终考虑最坏的情况,除非存在客观的摊销,证明最坏的情况可以由所有其他情况摊销。

该算法是二次的。

关于javascript - 如何计算包含可能在任何点终止的内部循环的代码片段的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54344707/

相关文章:

javascript - 如何展平嵌套的 promise 依赖?

javascript - 从 JavaScript 中的文本字段值中删除空格

javascript - 当查找具有特定属性的对象时,是否有类似 LINQ 的替代方法可以替代 JavaScript 中的循环?

algorithm - 复杂度时间 O(n) 或 O(n(n+1)/2)

methods - 给定最小堆 H,对时间复杂度给出严格的 O() 限制

algorithm - 对有限制的整数进行排序

Javascript循环遍历对象数组并获取两个值并插入到新的对象数组中

javascript - 如何使用 Javascript 获取 2 位数年份?

recursion - 动态规划: Tabular vs memoization

algorithm - 求解 a^3 + b^4 = c^3 + d^3 最佳运行时间