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 猪猪🐷 阅读(102) 评论(0) 收藏 举报
浙公网安备 33010602011771号