LeetCode-Sqrt(x) -求整数根号-二分搜索

https://oj.leetcode.com/problems/sqrtx/

二分搜索。需要注意每次改变边界时l=mi-1,r=mi+1,否则会死循环。另外可能会有整数溢出的情况,使用long long即可解决。

class Solution {
public:
    int sqrt(int x) {
        long long l=0;
        long long r=x;
        while(r>l){
            long long mi=(l+r)/2;
            long long mi2=mi*mi;
            if(mi2<x) l=mi+1;
            else if (mi2>x) r=mi-1;
            else {
                l=mi;
                break;
            }
        }
        if (l*l>x) l--;
        return l;
    }
};

  

posted @ 2014-10-09 09:58  zombies  阅读(169)  评论(0编辑  收藏  举报