二分查找, 注意不能计算mid^2会导致越界, left在开区间的情况下应该从0开始
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution {
public int mySqrt(int x) { int left = 0, right = (x == Integer.MAX_VALUE ? x / 2 : x + 1); while (left + 1 < right) { int mid = left + (right - left) / 2; if (mid <= x / mid) { left = mid; } else { right = mid; } } return left; } }
|