LeetCode二分查找:x 的平方根

LeetCode二分查找:x 的平方根

题目描述

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

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

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

示例 1:

java 复制代码
输入:x = 4
输出:2

示例 2:

java 复制代码
输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

解题思路

经典写法:

用二分查找的思想,通过不断缩小搜索范围,最终找到平方根的整数部分。

为什么采用long而不是int

因为再计算r时可能出现溢出

需要注意得一点是:在计算 mid 时使用 left+(right-left) / 2,而不是 (left + right) / 2。这样可以避免溢出。

代码

java 复制代码
class Solution {
    public int mySqrt(int x) {
        long high = x / 2;
        long low = 0;

        if (x == 1) {
            return 1;
        }

        while (low <= high) {
            long mid = low + (high - low) / 2;
            long r = mid * mid;

            if (r > x) {
                high = mid - 1;
            } else if (r < x) {
                low = mid + 1;
            } else {
                return (int) mid;
            }
        }

        // 返回 low - 1 而不是 low
        return (int) (low - 1);
    }
}
相关推荐
Black蜡笔小新7 小时前
零代码私有化自动化AI算法训练服务器DLTM如何破解企业AI落地难题
人工智能·算法·自动化
liulilittle7 小时前
回归物理本质:对拥塞控制实验室依赖与公平性误置的反思
网络·tcp/ip·计算机网络·算法·tcp·通信·拥塞控制
牛油果子哥q7 小时前
unordered_set / unordered_map 底层哈希表精讲,哈希原理、哈希冲突、链地址法、源码结构、有序与无序容器终极选型全解
数据结构·算法·哈希算法·散列表
开开心心_Every7 小时前
近200个工具的电脑故障修复合集
linux·运维·服务器·leetcode·智能手机·电脑·模拟退火算法
进击的荆棘7 小时前
优选算法——优先级队列
数据结构·c++·算法·leetcode·优先级队列
wen_zhufeng7 小时前
AudioX\-Turbo:面向通用音频生成的高效多模态统一框架
人工智能·算法·音视频
CoderYanger7 小时前
Java EE:5.网络原理-初识
java·网络·面试·职场和发展·java-ee·智能路由器·学习方法
牛油果子哥q7 小时前
哈希表经典刷题模型与布隆过滤器精讲,哈希查重、哈希计数、双哈希映射、误判原理与工业级落地应用
数据结构·算法·哈希算法·散列表
ruxshui7 小时前
排序算法及不同场景应用总结
算法·排序算法
旖-旎7 小时前
《LeetCode 200 FloodFill 岛屿数量DFS解法》
c++·算法·深度优先·力扣·floodfill