leetcode 69题 思考关于二分查找的模版

Posted 萝卜er

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 69题 思考关于二分查找的模版相关的知识,希望对你有一定的参考价值。

leetcode 69,

Implement int sqrt(int x).

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.

Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.

 

注意看代码里面的注释

class Solution {
    public int mySqrt(int x) {
        if (x<=1) return x; 
        long left = 0;
        long right = x;
        while (left < right) {
            long mid = (left + right + 1)/2;
            if (mid * mid == x) { 
                return (int)mid;
            } else if (mid * mid < x) {//关键就是当mid*mid < x的时候,mid可不可能成为结果,这道题里面答案显然是可能的, 但是对275来说就不是这样了, 因为必须是至少h个大于h的才行,所以应该用 mid = (left + right)/2   left = mid + 1;  right = mid;
                left = mid;
            } else {
                right = mid - 1;
            }
        }
        return (int)(left);
    }
}

 

 

二分模版

1. 开始对于特殊情况, len <= 1的情况做特殊处理。

2. 模版一  mid = (left + right)/2;  left = mid + 1; right = mid;  leetcode 275题, 模版二  mid = (left + right + 1)/2;  left = mid; right = mid - 1;   应用于leetcode 69

3. 对于一定有解的情况直接返回即可, 如果可能没有结果的,最后一定要对left进行检验( 这个操作可能没用,但是不会有坏处 )

以上是关于leetcode 69题 思考关于二分查找的模版的主要内容,如果未能解决你的问题,请参考以下文章

❤️ 互联网大厂面试高频算法题汇总 ❤️ —— ❤️ 二分专场 ❤️

算法面试题——二分查找套路法

leetcode 69.x的平方根(Java 二分查找 easy)

leetcode 69 Sqrt(x) ---java

数据结构和算法三个“二分查找”练习

leetcode - 二分查找