Implement int sqrt(int x).
Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
Example 1:
Input: 4
Output: 2
Example 2:
Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842…, and since
the decimal part is truncated, 2 is returned.
method 1 binary search
看作是对scope的二分查找,但if中的判断需要进行修改,不是单纯的mid和low/high比大小
bool c(int x, int mid){
if(mid <= x/mid) return true;
else return false;
}
int mySqrt(int x) {
if(x == 0) return 0;
int lo = 1, hi = x;
while(hi - lo > 1){
int mid = lo + (hi - lo)/2;
if(c(x,mid)) lo = mid;
else hi = mid;
}
return lo;
}
summary
- binary search可以分为两类,一类是对scope的,一类是对range的
scope即在[最小数,最大数]这个范围内进行搜索;range的即在有序数组的范围内进行搜索 - binary search的if判断条件,要根据题目进行相应修改,不仅仅简单的和mid比大小,单独编写一个compare函数。