leetcode刷题61.x 的平方根——Java版

Posted 一条coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode刷题61.x 的平方根——Java版相关的知识,希望对你有一定的参考价值。

⭐欢迎订阅《leetcode》专栏,每日一题,每天进步⭐

二分查找,用x/m<m而不是m*m>x防止溢出

——leetcode此题热评

前言

哈喽,大家好,我是一条。

糊涂算法,难得糊涂

《糊涂算法》专栏上线倒计时——7天

Question

69. x 的平方根

难度:简单

给你一个非负整数 x ,计算并返回 x 的 平方根 。

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2

解释:8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。

提示:

0 <= x <= 231 - 1

Solution

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5

转换一下思维,把开放换成平方,那此题变为查找一个有确定范围的整数,且满足单调性(排好序)

立即推——二分查找

Code

所有leetcode代码已同步至github

欢迎star

/**
 * @author 一条coding
 */
class Solution {
    public int mySqrt(int x) {
        int l = 0, r = x, 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;
    }
}

Result

复杂度分析

  • 时间复杂度:O(logN)

🌈寻宝

⭐今天是坚持刷题更文的第53/100天

⭐各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力

⭐更多算法题欢迎关注专栏《leetcode》

为了回馈各位粉丝,礼尚往来,给大家准备了一些算法教学视频和电子书

需要的小伙伴可以点这里

以上是关于leetcode刷题61.x 的平方根——Java版的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode——x 的平方根(二分)

leetcode刷题之二分查找(Java)

Leetcode刷题之二分查找(Java)

Leetcode69. x 的平方根(二分)

[JavaScript 刷题] DP - 组成整数的最小平方数数量, leetcode 279

LeetCode刷题69-简单-x的平方根