一个循环中写2个循环的时间复杂度是多少

piy*_*hya 2 javascript for-loop time-complexity

嗨,我只是在想如果我像下面给定的那样编写循环,那么它的时间复杂度是多少。它会是o(n ^ 2)或只是o(n)

for(var i=0,j=0;i<arr1.length || j<arr2.length;i++,j++)
{
    //some code here
}
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 6

时间复杂度为O(max(m,n)),其中mn分别为arr1和的大小arr2

for循环中ij在循环后和循环后都增加。该for循环停止,如果这两个i >= arr1.lengthj >= arr2.length。由于ij始终具有相同的值(增量i和之间的时刻除外j),因此如果ij都已到达其对应列表的末尾,则结束。

在这里,我们作一个假设,递增ij在固定时间内运行(以及非常大的数字,这将需要O(B)b具有任意大小数的位数),并且身体中的for循环只包含指令也可以持续运行


Cer*_*nce 5

假设中没有其他循环//some code here,则时间复杂度为O(N),因为循环会在i<arr1.length和和j<arr2.length,和ij都在每次迭代时增加时立即中断。它将运行Math.max(arr1.length, arr2.length)迭代。

对于

i<arr1.length || j<arr2.length
Run Code Online (Sandbox Code Playgroud)

成为false(因此没有更多的迭代),需要

i >= arr1.length
// and
j >= arr2.length
Run Code Online (Sandbox Code Playgroud)

  • 我认为它将为`Math.max(arr1.length,arr2.length)`运行,因为只要`i` /`j`之一没有完成,条件就是`true`。 (3认同)