二分,千注意万注意啊,JS里做除法,算出是浮点数结果就是浮点数~~
在循环条件为 l <= h 并且循环退出时,h 总是比 l 小1,也就是说 h = 2,l = 3,因此最后的返回值应该为 h 而不是 l。
var mySqrt = function(x) {
if(x==0) return 0;
if(x<=3) return 1;
let l=1,h=Math.floor(x/2); //h这步算是自己的改进吧,因为x>4时,(x/2)^2>x是肯定的。故一开始就可将范围缩办。
//千注意万注意啊,JS里做除法,算出是浮点数结果就是浮点数~~
while(l<=h){
var m=Math.floor(l+(h-l)/2);
var temp=Math.floor(x/m);
if(m==temp) return m;
else if(m>temp) h=m-1;
else l=m+1;
}
return h;
};