Leetcode 69 Sqrt(x) 二分查找(二分答案)

可怕的同时考数值溢出和二分的酱油题之一,常在各种小公司的笔试中充当大题来给你好看。。。

题意很简单,在《二分查找综述》中有描述。

重点:使用简单粗暴的long long来避免溢出,二分均方根的答案来得到准确解。

当然这里的溢出不止是相乘的溢出,还有第六行那段代码的溢出,每次都会有几个解决问题的斗士牺牲在这里。。。

 1 class Solution {
 2 public:
 3     int mySqrt(int x) {
 4         long long a = 0, b = x;
 5         while(a <= b ){
 6             long long mid = a + (b - a) /2;
 7             if(mid * mid == x) return mid;
 8             if(mid * mid < x ) a = mid + 1;
 9             else b  = mid - 1;
10         }
11         return (int)b;
12     }
13 };

这里已经给出了两种题目的解法,相信大家对于二分查找有了一个比较清晰的认识,可以写一个关于二分查找的模板了,但是懒惰楼主是不会写的。。。

posted @ 2016-06-14 16:44  Breeze0806  阅读(394)  评论(0编辑  收藏  举报