标签:基本 div case RoCE ase 判断 问题 public 一半
利用二分法进行求根,只保留整数向下取整
Exp:sqrt(16)=4, sqrt(18)=4;
思路: 利用二分法,从1~x 中找出 x 的平方根
基本的思路是每次找到mid,然后判断真实的根在mid左边还是右边,舍去一另外的一半
int left=1; int right=x; while(left<right-1){ int mid=left+(right-left)/2; int tmp=mid*mid; //Might be Overflow if(tmp==x){ return tmp; }else if(tmp>x){ right=mid-1; }else{ left=mid; } }
但是这样的写法有可能会产生OverFlow的问题
改进后的写法
public int sqrt(int x) { // Corner case if (x <= 1) { return x; } int left = 1; int right = x; while (left < right - 1) { int mid = left + (right - left) / 2; int tmp = x / mid; if (tmp == mid) { return mid; } else if (tmp > mid) { left = mid; } else { right = mid - 1; } } // Post Processing if (x / right >= right) { return right; } return left; }
标签:基本 div case RoCE ase 判断 问题 public 一半
原文地址:https://www.cnblogs.com/brooksli/p/10854462.html