(Good topic)二分法:x的平方根
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
思路:emmm,一开始脑子里想到的就是暴力迭代,可是,,怎么可能可以呢。看了一下官方思路,就是x的平方根一定比x/2小,于是脑子里想到的还是暴力迭代,,,,然后我再往下拖了一下,依然是二分法,二分法写出来了,但是又遇到了int溢出问题,然后最后改了,上代码。
1 int mySqrt(int x) 2 { 3 if(x < 2) 4 return x; 5 6 int left = 2; 7 int right = x/2; 8 9 while(left <= right) 10 { 11 long mid = (left+right)/2; 12 if(mid*mid > x) 13 { 14 right = mid-1; 15 } 16 else if(mid*mid < x) 17 { 18 left = mid+1; 19 } 20 else 21 { 22 return mid; 23 } 24 25 } 26 return right; 27 }