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