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;

    }
}
相关推荐
立志成为大牛的小牛1 分钟前
数据结构——四十二、二叉排序树(王道408)
数据结构·笔记·程序人生·考研·算法
Funny_AI_LAB2 小时前
李飞飞联合杨立昆发表最新论文:超感知AI模型从视频中“看懂”并“预见”三维世界
人工智能·算法·语言模型·音视频
RTC老炮5 小时前
webrtc降噪-PriorSignalModelEstimator类源码分析与算法原理
算法·webrtc
草莓火锅7 小时前
用c++使输入的数字各个位上数字反转得到一个新数
开发语言·c++·算法
散峰而望7 小时前
C/C++输入输出初级(一) (算法竞赛)
c语言·开发语言·c++·算法·github
摇滚侠7 小时前
StreamAPI,取出list中的name属性,返回一个新list
数据结构·list
Kuo-Teng7 小时前
LeetCode 160: Intersection of Two Linked Lists
java·算法·leetcode·职场和发展
fie88898 小时前
基于MATLAB的狼群算法实现
开发语言·算法·matlab
偷偷的卷8 小时前
【算法笔记 11】贪心策略六
笔记·算法
ZPC82108 小时前
FPGA 部署ONNX
人工智能·python·算法·机器人