Leetcode - Sqrt(x)

My code:

public class Solution {
    public int mySqrt(int x) {
        if (x < 0) {
            return -1;
        }
        else if (x <= 1) {
            return x;
        }
        
        int begin = 1;
        int end = x - 1;
        while (begin <= end) {
            int middle = begin + (end - begin) / 2;
            int temp = x / middle;
            if (temp < middle) {
                end = middle - 1;
            }
            else if (temp > middle) {
                begin = middle + 1;
            }
            else {
                return middle;
            }
        }
        
        return end;
    }
}

真是奇怪,我连这道题目都没做过。。。

这道题目就是binary search.
首先, 0,1的情况单独处理。
其次,拿到mid时,
不要 mid * mid
会溢出。这是我犯的错误。
要 x / mid去比较。

以前刷题,每次都是从做过的题目开始,狂刷一百多题。刷的永远都是会的题目。花的时间再多也永远不会有长进!!!

Anyway, Good luck, Richardo! -- 09/01/2016

My code:

public class Solution {
    public int mySqrt(int x) {
        if (x <= 0) {
            return 0;
        }
        else if (x == 1) {
            return 1;
        }
        
        int begin = 1;
        int end = x - 1;
        while (begin <= end) {
            int mid = begin + (end - begin) / 2;
            if (mid > x / mid) {
                end = mid - 1;
            }
            else {
                if ((mid + 1) > x / (mid + 1)) {
                    return mid;
                }
                else {
                    begin = mid + 1;
                }
            }
        }
        return -1;
    }
}

reference:
https://discuss.leetcode.com/topic/8680/a-binary-search-solution/2

牛顿迭代法

Anyway, Good luck, Richardo! -- 09/28/2016

你可能感兴趣的:(Leetcode - Sqrt(x))