我会在这个代码,但我竭力要了解它是如何为O(M + N )而不是O(Math.max(m,n))。或者是O(Math.max(m,n))下的O(m + n)呢?如何确定的时间复杂度为O(M + N)或O(Math.max(M,N))
int i = 0, j = 0, res = 0;
while (i < houses.length) {
while (j < heaters.length - 1
&& Math.abs(heaters[j + 1] - houses[i]) <= Math.abs(heaters[j] - houses[i])) {
j++;
}
res = Math.max(res, Math.abs(heaters[j] - houses[i]));
i++;
}
有一个关于CTCI的例子,其中函数返回一个n大小的数组。它说,由于计算N> LOGN大O字时,导致O(n)的整体因调用堆栈的log(n)的空间复杂度是小巫见大巫。在这个例子中没有提到O(n + logn)(对于那些好奇的人来说是4.4)。
任何解释,将不胜感激!
在简单的话,'M + N <= Math.Max(M,N)+ Math.Max(M,N)= O(Math.Max(M,N))';因此结果。 –