一、二分的流程
- 确定二分的边界
- 编写二分的代码框架
- 设计一个check(性质)
- 判断一下区间如何更新
- 如果更新方式是L = mid,R = mid -1,那么就在算mid的时候加上1
二、代码
/**
* @param {number} x
* @return {number}
*/
var mySqrt = function(x) {
// 二分法
// 1、确定二分的边界
let l = 0, r = x;
// 2、编写代码框架
while(l < r) {
let mid = l + r + 1 >> 1; // 等价于l+r/2下取整
// 3、设计一个性质并判断区间如何更新
// 找到k²<=x的最大k值
if(mid <= x / mid) {
l = mid;
} else {
r = mid - 1;
}
}
return l; // return r也可以,因为此时l和r相等
};