一、思路链接
https://www.bilibili.com/video/BV1gZ4y1s7d8?t=383
二、具体题目
https://leetcode-cn.com/problems/sqrtx/
三、具体代码
// 一、暴力破解
// var mySqrt = function(x) {
// if(x<=1) return parseInt(x);
// for(let i=2; i<=x; i++) {
// if(i * i >x) {
// return parseInt(i-1);
// } vr
// }
// return -1;
// };
// 二、二分法求解
var mySqrt = function(x) {
if(x <= 1) {
return x;
}
let l = 1;
let r = x >> 1;
while((l + 1) < r) {
let mid = l + ((r - l) >> 1);
if(mid === (x / mid)) {
return mid;
}else if(mid > (x / mid)) {
r = mid;//r不能为mid-1,因为while的条件限制是(l + 1) < r
}else {
l = mid;//l不能为mid+1,因为while的条件限制是(l + 1) < r
}
}
if(r > (x / r)) {
return l;
}else {
return r;
}
}