题目链接
区间寻找某一个数字使用二分法
class Solution {
// 1.我的暴力算法,54ms,5.03%
public int mySqrt1(int x) {
for(int i = 1; i < x; i++) {
if(i > x/i) {
return i-1;
}
}
return x==0?0:1;
}
// 2.我的二分查找,1ms,94.76%
public int mySqrt2(int x) {
if(x == 0) return 0;
int left = 1, right = x;
while(left < right) {
int mid = (right - left)/2 + left;
// System.out.println(mid);
if(mid <= x/mid && (mid+1) > x/(mid+1)) {
return mid;
} else if(mid < x/mid){
left = mid+1;
} else {
right = mid-1;
}
}
return left;
}
// 3.老师的二分查找,1ms,94.76%
public int mySqrt(int x) {
if(x == 0) return 0;
int index = -1, left = 1, right = x;
while(left <= right) {
int mid = (right - left)/2 + left;
if(mid <= x/mid) {
index = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return index;
}
}