(Good topic)二分法:x的平方根

 
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2

示例 2:
输入: 8
输出: 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 }

 

 

 

 
 
posted @ 2020-03-15 15:17  Xxaj5  阅读(204)  评论(0编辑  收藏  举报