超出时间限制

来源:11-10 LeetCode:374. 猜数字大小

weixin_慕神2105054

2021-03-10

为什么这里用位运算来除2,会超出时间限制

var guessNumber = function(n) {
    let l=1,r=n,mid;
    while(l<=r){
	    //mid=Math.floor((l+r)>>2)
        mid=Math.floor((l+r)/2);
        const state=guess(mid);
        if(!state){
            return mid;
        }else if(state===1){
            l=mid+1;
        }else{
            r=mid-1;
        }
    }
};
写回答

2回答

lewis

2021-03-12

可能死循环了,打个console log看看,另外你的位运算是除以四吧……

0
1
weixin_慕神2105054
非常感谢!
2021-03-12
共1条回复

慕莱坞3126862

2021-04-05

研究了一下, JS中第32个位是不能访问的. 如果使用">>", 在处理第32位为1的大数的情况下(比如3829520109-> 二进制: 11100100010000011101011011101101), 位运算>>不会填充符号位. 即第32位的1不会改变, 因此会输出负数.

处理这种情况使用无符号位移运算符即可">>>".

不过JS对位运算的处理机制比较特殊, 看了一圈发现大家都不推荐使用位运算... 

1
0

JavaScript版数据结构与算法 轻松解决前端算法面试

夯实算法基础,填补技术短板,助力面试考题最后一公里

2479 学习 · 683 问题

查看课程