【发布时间】:2020-05-08 03:46:38
【问题描述】:
有问题的problem 要求反转一个 32 位有符号整数。这是Java中给定的解决方案:
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
}
根据解的解释,它的时间复杂度是O(log10(n)),因为x中大约有log10(x)个数字。直观地说,while 循环似乎有 n-1 次迭代,其中 n 是位数。 (即:7 位数字需要 6 次迭代)但是,解决方案和给定的复杂性意味着 n 是整数本身而不是位数。谁能帮助我直观地理解为什么上述解决方案是 log10(n) ?
【问题讨论】:
-
仅供参考,大 O 对日志不敏感。 O(log10(n)) = O(log(n)/log(10)) = O(log(n))。不过与您的问题完全无关