【leetcode】69. Sqrt(x)

这道题考察的也是二分查找,应该注意的是边界条件,当x为0或者为1时需要讨论一下,然后保证跳出循环时,left的值刚好比那个理想值大1.一般情况下,while里面如果是<=,那么里面的left和right的值就会在mid基础上加1或是-1.当然,个别题还需要多加注意边界条件,二分查找的题思路很简单,但是边界条件很多,需要重视。

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

猜你喜欢

转载自www.cnblogs.com/zhaijiayu/p/9633959.html