69. Sqrt(x)

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

 

5

1 5 

Mid = 3 

9 > 5 

Right = 3 

Left = 1 

Mid = 2 

注意这个退出条件 , 和其他 二分不太一样,

        if( mid <= x / mid && (mid+1) > x / (mid+1)){
          return mid;




 if( mid * mid  <= x && (mid+1) * (mid+1) > x  ), 这个乘法如果数很大,容易 overflow

0   8

 

4 

 

 

16 > 8 

 

Right = 4

Mid = 2

Left = 0

 

2 * 2 < 8, 3 * 3 > 8

 

4.   8.   9

2.   x.    3 

 

Return x

 

 

 

 

 

 

 

 

Implement int sqrt(int x).

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.

Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.

Example 1:

Input: 4
Output: 2

Example 2:

Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since 
             the decimal part is truncated, 2 is returned.

posted on 2018-07-18 08:25  猪猪&#128055;  阅读(102)  评论(0)    收藏  举报

导航