问题:
二分搜索有好几种变体,自己仍在摸索中。先记录一种用于“查找最后一个不大于x的数”的二分搜索模板。
不同变体的主要区别是while条件 ,if else条件 ,if else条件执行语句 ,return值 的问题:
while(lo<=hi)还是while(lo<hi)
if(mid<x)还是if(mid<=x)
lo = mid +1还是lo = mid
return hi 还是 hi-1 ... ...
代码:
/*C++ 二分搜索实现LeetCode 69题Sqrt.*/
class Solution {
public:
int mySqrt(int x) {
if(x<=1) return x;
int lo = 1;
int hi = x;
while(lo<=hi) {
int mid = lo + (hi-lo)/2;
if(mid <= x/mid) lo = mid+1;
else hi = mid-1;
}
return hi;
}
};