【发布时间】:2017-07-25 00:56:31
【问题描述】:
我正在查看这段代码,但我很难理解它是 O(m + n) 而不是 O(Math.max(m, n))。还是 O(Math.max(m, n)) 下的 O(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 时,由于堆栈调用导致的 log(n) 空间复杂度相形见绌,导致总体上为 O(n)。这个例子中没有提到 O(n + logn)(好奇的人是 4.4)。
任何解释将不胜感激!
【问题讨论】:
-
简单来说,
m + n <= Math.Max(m,n) + Math.Max(m,n) = O(Math.Max(m,n));因此结果。
标签: java performance time time-complexity space-complexity