【算法练习21】69.x 的平方根——二分查找

244 阅读2分钟

小知识,大挑战!本文正在参与「程序员必备小知识」创作活动

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

点赞再看,养成习惯。微信搜索【一条coding】关注这个在互联网摸爬滚打的程序员。

本文收录于github-技术专家修炼,里面有我的学习路线、系列文章、面试题库、自学资料、电子书等。


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

——leetcode此题热评

前言

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

糊涂算法,难得糊涂

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)

Last

独脚难行,孤掌难鸣,一个人的力量终究是有限的,一个人的旅途也注定是孤独的。当你定好计划,怀着满腔热血准备出发的时候,一定要找个伙伴,和唐僧西天取经一样,师徒四人团结一心才能通过九九八十一难。 所以,

如果你也想进大厂,

想学好数据结构和算法,

想坚持刷题,

想有一群志同道合的伙伴,

请加入组队刷题