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;

    }
}
相关推荐
QiLinkOS13 小时前
第三视觉理解徐玉生与他的商业活动(28)
大数据·c++·人工智能·算法·开源协议
wabs66613 小时前
关于动态规划【力扣1143.最长公共子序列的思考】
算法·leetcode·动态规划
剑挑星河月13 小时前
54.螺旋矩阵
java·算法·leetcode·矩阵
Robot_Nav14 小时前
MPPI 局部规划器实验设计讲解
人工智能·算法·mppi
mingo_敏14 小时前
Mean-Teacher 均值教师自训练框架详解
算法·均值算法
星空露珠15 小时前
迷你世界UGc3.0脚本Wiki[剧情动画模块管理接口 Timeline]
开发语言·数据结构·算法·游戏·lua
笨笨没好名字15 小时前
Leetcode刷题python3版第一周(下)
linux·算法·leetcode
jinyishu_15 小时前
常见排序算法详解
数据结构·算法·排序算法
手写码匠15 小时前
手写 LLM 安全护栏:从内容审核到越狱防御的完整实现
人工智能·深度学习·算法·aigc
luj_176815 小时前
草酸与烟酸对消化及糖代谢的影响解析
服务器·c语言·开发语言·经验分享·算法