LeetCode 69 Sqrt(x)
Posted brooksli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 69 Sqrt(x)相关的知识,希望对你有一定的参考价值。
利用二分法进行求根,只保留整数向下取整
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; }
以上是关于LeetCode 69 Sqrt(x)的主要内容,如果未能解决你的问题,请参考以下文章