求平方根
Implement int sqrt(int x)
.
Compute and return the square root of x.
Example
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
Challenge
Solution:
O(log(x))
public int sqrt(int x) {
if (x == 0) {
return 0;
}
int start = 1;
int end = (x>>1) + 1;
int mid;
int root;
while (start + 1 < end) {
mid = start + ((end - start) >> 1);
root = x / mid;
if (root == mid) {
return mid;
}
if (root > mid) {
start = mid;
} else {
end = mid;
}
}
return start;
}
思路:
利用除法判断,避免溢出。保持模板。
start, mid, end.
1. mid 小了,则 start = mid,return start。 相当于返回mid。
2. mid 大了,则 end = mid,return start。已知mid大了,所以还是返回start。
不要使用加减1,保证 start 和 end 不重合。