当前位置: 首页 > 知识库问答 >
问题:

了解两个嵌套 while 循环中的时间复杂度

赵辉
2023-03-14

我遇到了这个代码。它只扫描数组元素一次。但我对有两个嵌套的while循环将复杂性增加到O(n^2)感到困惑。代码如下:

def summaryRanges(nums):
    x, size = 0, len(nums)
    ans = []
    while x < size:
        c, r = x, str(nums[x])
        while x + 1 < size and nums[x + 1] - nums[x] == 1:
            x += 1
        if x > c:
            r += "->" + str(nums[x])
        ans.append(r)
        x += 1
    return ans

我正在学习算法,所以如果我哪里出了问题,请纠正我。非常感谢。

共有1个答案

燕野
2023-03-14

你的问题不是100%清楚,但如果你的意思是为什么这不是O(N^2)而有嵌套循环,那么:

虽然有嵌套循环,但它们使用相同的变量在相同的空间上运行以推进迭代。由于内部循环不会回溯,并且每当它向前移动时,它也会将外部循环向前推(在完全相同的距离上),如果N增长M(如果N1=N0 M),迭代不会增长到M。O(N^2)意味着随着N的增长,迭代呈指数增长。

 类似资料:
  • 这个问题是为了修改过去的试卷,如果我走上了正确的道路,我需要一些建议。 求出下面一段代码的时间复杂度,表示给定整数n的操作次数: 所以我认为外循环是,第一个内环是,第二个内环是。我只是想知道我是否有一个大致的想法,以及如何从这里继续前进。

  • 我很难理解算法分析,尤其是下面的例子: 所以我的理解是,外循环是,当我乘以一个常量时,我不确定是否有任何区别。 不过,最让我困惑的是内部循环。我认为它是,因为j被常数递减,但我不确定和

  • 如果我通过两个嵌套的For循环进行输入 外环的复杂度是O(X),但是我对内环的时间复杂度感到困惑,因为Y是可变的。

  • 这段代码的时间复杂度是多少?外循环运行n次,但我不确定内循环。如果内环对于i的每个值一直运行到n,它能是O(n^2)吗?

  • 有三个嵌套的循环,如果循环增量为1,我可以找到复杂性,但是如果循环增量像这样i=c,我就糊涂了? 第三个for循环的复杂度是m,但第一个for循环的复杂度是n/c,第二个for循环的复杂度是n==

  • 我的困惑是- 如果我把n+(n^2-1)*O(1)写成n+O(1)+O(1)+........+O(1),那么我可以忽略低阶项,复杂性将是O(n),但是另一个推理可以是一个常数的工作量正在做n^2次,所以时间复杂性应该是O(n^2) 在这个问题中也发生了类似的事情-带有if语句的嵌套循环的时间复杂度O(N):O(N^4)?