java - 为什么逆整数(Leet Code)的解法是 O((log10(n))?

标签 java big-o logarithm

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) ?

最佳答案

如果x是整数,则floor(log10(x)) + 1等于x中的位数。

令 log(10)x = 某个数字 y。那么 10^y = x。
例如,

log(10) 10 = 1   
log(10) 100 = 2  
log(10) 1000 = 3 
...

当 x 不是 10 的完全幂时:

floor( log(213) ) = 2

如果这不能回答您的问题,请告诉我。

关于java - 为什么逆整数(Leet Code)的解法是 O((log10(n))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59851998/

相关文章:

java - 我应该在 Post 方法中设置哪个 IP 地址?

java - 如何修复底部按钮上的软键盘重叠?

java - 如何在 Linux 中使用 -vm 参数在 Eclipse RCP 产品的 Config.ini 文件中设置类路径

mysql - MySQL 表总行数上的 COUNT(*) 的 Big-O 算法时间复杂度是多少?

python - matplotlib 中的自定义对数轴缩放

matlab - 在双对数(以 10 为底)图上执行线性回归 Matlab

java - 无法找到 jre1.8.0_77 的可执行文件

big-o - f(n)= O(g(n))或g(n)= O(f(n))

java - 什么是 For 循环的大 O,迭代平方根时间?

r - 无法在 R 中使用 ggplot2 调整对数曲线