1. 程式人生 > >69. Sqrt(x)

69. Sqrt(x)

rar 更新 .com 鏈接 roo solution mysq 總結 and

Implement int sqrt(int x).

Compute and return the square root of x.

二分可解

這裏是關於二分的一些總結:

首先,如果題目屬於"二分值越大越符合條件",即要求符合條件的最小值,那就是
while(r>l){mid=(l+r)/2。。。} return l;
然後更新是不符合條件l=mid+1,否則是r=mid
反之,即 題目屬於"二分值越小越符合條件",即要求符合條件的最大值,那就是
while(r>l){mid=(l+r+1)/2。。。} return r;
然後更新是符合條件l=mid,否則是r=mid-1
至於為啥?→_→其實只要試試r-l=1的例子
upd:又想起一坑{其實是看到有人寫了},如果涉及負數,最好用mid=l+(r-l)/2代替第1類,mid=l+(r-l+1)/2代替第2類 鏈接:https://www.zhihu.com/question/36132386/answer/66071801
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
class Solution {
public:
    int mySqrt(int x) {
        long long l = 0, r = x,mid;
        if (x < 2) return x;
        while
(l < r) { mid = l + (r - l + 1) / 2; if (mid > x/mid) r = mid - 1; else if (mid < x/mid) l = mid; else return mid; } return r; } };

69. Sqrt(x)