leetcode69x的平方根
思路:[l,r];mid=(l+r)/2
- 使用
temp=x/mid
而不是mid*mid
来进行比较计算,这样容易超出范围 - 二分法查找
(1)合适的平方根只有在temp>mid
的时候出现,比如8/1=8;8/2=4;8/3=2
,结果为mid
最大值。
(2)mid
的移动方向与temp
有关,temp>mid
时尽量让mid
最大,l=mid+1
。temp<mid
时mid
过大r=mid-1
。
代码
int mySqrt(int x){
long r = x;
long l=1;
int ans=0;
if(x==0||x==1)
return x;
while (l<=r)
{
long mid = (l+r)/2;
int temp = x/mid;
if(temp==mid)
return mid;
if(temp>mid){
l=mid+1;
if(ans < mid)
ans = mid;
}
else{
r=mid-1;
}
}
return ans;
}
还没有评论,来说两句吧...