69. Sqrt(x)(数学、二分法)

实现针对int类型的sqrt(int x)。计算并返回x的平方根,x确定为非负整数

Implement int sqrt(int x).

Compute and return the square root of x.

x is guaranteed to be a non-negative integer.

 

Example 1:

Input: 4
Output: 2

 

Example 2:

Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since we want to return an integer, the decimal part will be truncated.

高票做法:
public int sqrt(int x) {
    if (x == 0)
        return 0;
    int left = 1, right = Integer.MAX_VALUE;
    while (true) {
        int mid = left + (right - left)/2;
        if (mid > x/mid) {
            right = mid - 1;
        } else {
            if (mid + 1 > x/(mid + 1))
                return mid;
            left = mid + 1;
        }
    }
}

用了二分法~先找1和最大值之间的中间值,看该值的平方是否大于x。若大于x,则求左段的中间值继续;若小于等于x,则判断该中间值+1是否大约x,若该中间值加1大于x,说明该值为所求值;否则求右段的中间值继续~

posted @ 2018-03-30 13:48  同销万古愁  阅读(188)  评论(0编辑  收藏  举报