嗨,我只是在想如果我像下面给出的那样编写for循环,那么它的时间复杂度是多少。它会是o(n ^ 2)或只是o(n)
for(var i=0,j=0;i<arr1.length || j<arr2.length;i++,j++)
{
//some code here
}
答案 0 :(得分:6)
时间复杂度为 O(max(m,n)) ,其中 m 和 n 的大小分别为^Up::SendInput,!{Up}
和function arraysUnequal(a1, a2)
{
let result = [];
let maxindex = (a1.length > a2.length) ? a1.length : a2.length;
for (let i = 0; i < maxindex; i++)
{
if (!objectsEqual(a1[i]||{}, a2[i]||{})) { result.push(i) }
}
return result;
}
的
在您的arr1
循环中,您会在循环后同时递增arr2
和for
。如果同时使用i
和j
,则for
循环将停止。由于i >= arr1.length
和j >= arr2.length
始终具有相同的值(增量i
和j
之间的时刻除外),因此如果i
和{{ 1}}已到达其相应列表的末尾。
我们在这里假设递增j
和i
是在恒定时间内进行的(对于非常大的数字, O(b)与 b 具有任意大小的数字的位数),并且j
循环的 body 也仅包含恒定时间运行的指令。
答案 1 :(得分:5)
假设//some code here
中没有其他循环,则时间复杂度为O(N)
,因为该循环会在i<arr1.length
和j<arr2.length
以及{ {1}}和i
在每次迭代中递增。它将运行j
个迭代。
对于
Math.max(arr1.length, arr2.length)
要成为i<arr1.length || j<arr2.length
(因此无需再进行迭代),就需要
false