二分查找算法(三) ---- X的平方根

记录一下二分查找算法

力扣题目链接: https://leetcode.cn/problems/sqrtx/

  • 二分查找的前提条件
    • 保证数组是有序的
    • 数组中无重复性元素
  • 二分法的区间定义主要有两种
    • [L,R] 左闭右闭的形式
    • [L,R) 左闭右开的形式

题目: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

思路:

一个数的平方根小于等于这个数
题目隐性条件告诉你,0 - x 的数是递增的,我们就可以考虑使用二分法。
我们只要判断每次的mid的值的平方是否小于等于这个数,然后用临时变量记录mid的值即可!
mid的平方可能会整数溢出,所以我们应该在比较的时候,强转成 long 类型

代码如下

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;
    }
}

OK ,打完收工!

你可能感兴趣的:(算法,leetcode,数据结构)