algorithm - 递减嵌套for循环的运行时间

标签 algorithm runtime big-o

我最近参加了一次编程面试,出现了以下代码。面试官告诉我这是一个 O(n*n) 算法,但我很困惑这是怎么回事,考虑到每次外循环运行时内循环运行的次数更少。

绝对不是 O(n),但为什么是 O(n*n)?

for(int i = 0; i < n; i++)
{
    for(int j = i + 1; j < n; j++)
    {
        ...
    }
}

最佳答案

这样看。第一次通过 i 时,您将循环 j 99 次。接下来,98、97、96 等,一直到 1。这等于:

1 + 2 + 3 + 4 + 5 + ... + n

对这些 ( triangular) 数字求和的快速方法是使用 attributed to Gauss 技术:

sum = ((n * n) + n) / 2

现在您可以清楚地看到 O(n*n)。

关于algorithm - 递减嵌套for循环的运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19102684/

相关文章:

python - 有人可以告诉我算法的名称(如果存在)或告诉我如何找到它

java - 根据二维网格阵列上的单元格值查找路径

java - 在不知道用户名的情况下启动用户文件夹中的程序

python - Python的max函数有多高效

string - 空间复杂度 O(1) 存储字符串

php - 我如何跟踪一个人喜欢的东西?比如一个视频

java - 使用递归统计嵌套列表中奇数长度或偶数长度的列表数量

c - 为什么这段代码的运行时效率是O(n^2)?

c# - 使用运行时确定的类型实例化对象

performance - 查找数字的最快方法是什么?