题目简介:
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
示例 2:
1 2 3 4
| 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
|
思路:使用二分查找,若循环时,x / mid = mid(防止溢出,即x = mid * mid)或 x / mid > mid && x / (mid + 1) < mid + 1(代表平方根为小数,此时的mid为舍去小数的剩余部分),则返回mid。否则根据x / mid 和 mid 的比较来更改left或right的值。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public: int mySqrt(int x) { if(x == 1 || x == 0) return x;
int left = 0; int right = x;
while(left < right){
int mid = (left + right) / 2;
if(x / mid == mid || (x / mid > mid && x / (mid + 1) < (mid + 1))) return mid; else if(x / mid > mid) left = mid; else if(x / mid < mid) right = mid; }
return -1;
} };
|