LeetCode 69. x的平方根
原题链接
简单
作者:
ccccc
,
2020-04-30 00:36:09
,
所有人可见
,
阅读 732
本题使用二分法模版二
假设x是我们要找的值,check函数是我们划分的性质(二分法一般都可以将区间划分为两个性质)
模板一:
将区间分为[L , x) 和[x,r];
while(l < x){
int m = (l + r) /2;
if(check(x)){
l = m + 1;
}else{
r = m;
}
}
模版二:
将区间分为[l , x] 和 (x , r]
while(l < r){
int m = (r + l + 1)/2; // 这个地方如果边界变化中有 - 1 则需要 l + r +1;
if(check(x)){
l = m;
}else{
r = m -1;
}
}
题目代码注意:可能存在溢出
class Solution {
public int mySqrt(int x) {
int l = 0 , r = x;
while(l < r){
int m = (int)(l + r + 1L) >> 1; //r + l可能存在溢出 所以需要先将其化为long形式
if(m <= x/m){ //m*m可能溢出
l = m;
}else{
r = m - 1;
}
}
return l;
}
}