【二分查找】LeetCode 69. x 的平方根

题目链接

69. x 的平方根

思路

基本思路是在区间 \([1, x/2]\) 中使用二分查找(因为平方根必然小于 \(x/2\)),只不过需要注意一些细节。

  1. 因为使用的是闭区间查找,所以判断循环终止的条件为 \(left \leq right\)
  2. 为了防止溢出,使用 mid = (right - left) / 2 + leftmid == x / mid 进行运算与判断。
  3. 同样是因为闭区间查找,所以在 \(mid\) 已经判断过的情况下,变换左右边界应该跳过 \(mid\),所以变换为 \(left = mid + 1\)\(right = mid - 1\)
  4. 因为终止条件为 \(left \leq right\),所以在跳出循环的时候必然有 \(right < left\),所以要返回的是 \(right\)

代码

class Solution {
    public int mySqrt(int x) {
        if(x == 0){
            return 0;
        }
        if(x == 1){
            return 1;
        }

        int left = 1;
        int right = x / 2;
        while(left <= right){
            int mid = (right - left) / 2 + left;
            if(mid == x / mid){
                return mid;
            }else if(mid > x / mid){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }

        return right;
    }
}
posted @ 2023-05-07 07:49  Frodo1124  阅读(27)  评论(0编辑  收藏  举报