二分法查找-CSDN博客在之前的文章中详细分析过二分查找跳出循环后left right 的各种情况
该题利用这点 同样可实现查找x的平方根
public int mySqrt(int x) {
if (x==0){return 0;}
if (x==1){return 1;}
int left=1,right=x,mid;
while (left<=right){
mid=left+(right-left)/2;
if (mid<x/mid){//这一步不用 mid*mid<x 做判断是会造成整数的溢出
left=mid+1;
}
else if (mid>x/mid){
right=mid-1;
}
else return mid;
}
return left-1;
}
上述所说的整数溢出的测试用例 2147395599
代码的思想就是利用二分法不断进行去找,要注意的是判断 mid*mid<x时 要注意是要让 left 往右移动
最后left位置是大于所找元素的第一个位置 所以-1
142

被折叠的 条评论
为什么被折叠?



