剑指 Offer II 072. 求平方根(69. x 的平方根)

题目:

 

思路:

【1】话不多说这道题本身暴力破解是可以过的,而且基于限制为Integer.MAX_VALUE,所以可以知道根号为46341,那么基于这个进行遍历就好了。

【2】基于二分进行优化,因为从暴力破解这里我们看到了,不一定需要遍历那么多数据,所以筛选数据快的方式不就是二分吗,一下子过掉一半的数据。

代码展示:

二分的方式:

//时间1 ms击败89.94%
//内存38.7 MB击败56.57%
class Solution {
    public int mySqrt(int x) {
        if (x == 1 ){
            return 1;
        }
        int l = 0, r = x/2, ans = -1;
        while (l <= r) {
            int mid = l + (r - l) / 2;
            if ((long) mid * mid <= x) {
                ans = mid;
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        return ans;
    }
}

 

posted @ 2023-03-01 15:34  忧愁的chafry  阅读(12)  评论(0编辑  收藏  举报