算法编程(三):x 的平方根

113 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

写在前面

今天我们继续来学习一道难度定义为简单的LeetCode算法题:x 的平方根 。

一个很基础的数据概念,求一个数的平方根,也叫做给一个数值开方。

image.png

题目解读

从这道题的描述来看,其实很好理解,就是单纯的数学上的开方。

并且这里还注明了不能使用pow等函数方法,也就是说不能利用编程语言的现成计算方法。

只能自己实现了,那么如何实现呢,我一开始是想偷点懒,直接去看java中pow的源码怎么写的。

不过还是压制住了,打算先自己试着写一下。

想来想去还是使用二分法比较靠谱,只有这样才能快速的找到符合要求的值。

二分法嘛,很典型的一个算法,也是java面试中经常会被问到的一个问题,所以早早就背过了。

大家如果有兴趣可以自行在掘金上搜索一下二分法相关的文章。

代码实现

代码也是使用的二分法来实现的,具体的代码如下:

public class Solution {

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.mySqrt(4));
        System.out.println(solution.mySqrt(8));
    }

    public int mySqrt(int x) {
        int l = 0, r = x, result = -1;
        while (l <= r) {
            int z = l + (r - l) / 2;
            if ((long) z * z <= x) {
                result = z;
                l = z + 1;
            } else {
                r = z - 1;
            }
        }
        return result;
    }

}

执行结果如下:

二分法好像还是比较慢。

image.png

其他思路

虽然这里说了不让用pow函数,但是还是想试试,哈哈哈,得到了下面这个执行结果。

image.png

总结

本道题的考点在于对平方根的理解,还有就是二分法的使用,对二分法的理解帮助比较大。