x的平方根 ---- 二分查找

题目链接

题目:

分析:

  • 想要找到算术平方根, 可以从一个从零开始依次增大的数组中, 依次算他的平方并和target比较
  • 因为这个数组是有序的, 所以数组具有**"二段性"** , 可以使用二分查找算法
  • 因为结果只保留整数部分, 所以我们可以将数组分成两段, <= target 和 > target
  • 如果平方<=target, 应该让left = mid
  • 如果平方> target, 应该让right = mid - 1;
  • 根据二分查找算法的模版二, 定义mid应该是int mid = left + (right - left + 1) /2

为什么分成<= 和 > 而不是 < 和>=?

因为我们要的结果可能是正好等于target位置, 和取整数部分时可能会小于target的位置, 所以<=在一组, >在一组

代码:

java 复制代码
class Solution {
    public int mySqrt(int x) {
        long left = 0;
        long  right = x;
        if(x<1) return 0;//细节处理
        while(left<right){
            long mid = left + (right - left + 1) /2;
            if(mid * mid <= x) left = mid;
            else right = mid-1;
        }
        return (int)left;

    }
}
相关推荐
啦啦啦啦啦zzzz13 小时前
数据结构:二叉排序树(递归与非递归函数的全部实现)
数据结构·c++·二叉排序树
memcpy013 小时前
LeetCode 2657. 找到两个数组的前缀公共数组【集合,位运算】中等
算法·leetcode·职场和发展
计算机安禾13 小时前
【算法分析与设计】第37篇:平面扫描与线段交问题
java·大数据·数据库·算法·机器学习
8Qi813 小时前
LeetCode 236. 二叉树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·lca·后序遍历
兰令水13 小时前
leecodecode【二叉树排序+最近公共祖先】【2026.6.2打卡-java版本】
java·数据结构·算法·leetcode
人道领域13 小时前
【LeetCode刷题日记】77&&216.回溯算法剪枝优化在组合问题中的应用
java·算法·leetcode
Deepoch13 小时前
Deepoc数学大模型:以低幻觉特性护航半导体精准设计与制造
大数据·人工智能·算法·半导体·deepoc
诸葛务农13 小时前
共沸脱水技术及其在光刻胶用PGMEA纯化中的应用(上)
java·数据库·算法
£suPerpanda13 小时前
AtCoder Beginner Contest 453
c++·算法
词元Max14 小时前
4.2 决策树与随机森林
算法·决策树·随机森林