题解 | #二进制中1的个数#

二进制中1的个数

https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return int整型
 */
function NumberOf1( n ) {
    // js中所有数值都是使用64位存储的
    // 但在进行位运算时,JavaScript 引擎会将操作数转换为 32 位有符号整数,然后执行位运算,最后再将结果转换回为 64 位浮点数。
    // 故本题可以直接将整数n当做32位的二进制数
    // 此外,js中整数类型存储形式默认就是补码,因此也不需要进行特殊处理。
    // 原始思路:1的32位进制表示为0000...0001,最后一位为1,将n与1进行按位与操作,如果结果不为0,则表示最后一位为1,之后对n右移一位,继续比较下一位,以此类推进行计数。(运行超时)
    // let count = 0;
    // while(n){
    //     if(n & 1) count++;
    //     n = n >> 1;
    // }
    // return count;
    // 改进思路:布莱恩·科林汉算法 n & (n-1) 用于清除最右边的1,将其变为0
    // n-1是指将n最右边的1变为0,1右边的所有位变为1,如n为1101,则n-1为1100,n&(n-1)为1100,若n为1100,则n-1为1011,n&(n-1)为1100
    // n & (n-1):结果是将n最右边的1变为0,即清除最右边的1。
    let count = 0;
    // 每清除一次,计数一次
    while(n){
        count++;
        n = n & (n - 1);
    }
    return count;

}
module.exports = {
    NumberOf1 : NumberOf1
};

全部评论

相关推荐

09-14 14:42
门头沟学院 C++
旺旺米雪饼:举办了哥,你什么都没做错,全怪我那令人作呕的嫉妒和卑微的自尊心,看见你的文字我完全破防了,我直接丢盔弃甲了,看见你这图的那一秒,我满头大汗,浑身发冷,亿郁症瞬间发作了,生活仿佛没了颜色,像是被抓住尾巴的赛亚人,带着海楼石的能力者,抽离尾兽的人柱力,像是没了光的奥特曼,彻底断绝了生的希望。我几乎都快羡慕得疯了,倒在床上蒙住被子就开始抱着枕头尖叫流泪,嘴里一边喊着卧槽卧槽,一边又忍着,我边发边哭,打字的手都是抖的,后来我的手抖得越来越厉害,从心头涌起的思想、情怀和梦想,这份歆羡和悔恨交织在一起,我的笑还挂在脸上,可是眼泪一下子就掉下来了。求你了别发了,我生活再难再穷我都不会觉得难过,只有你们发这种东西的时候,我的心里像被刀割一样的痛,打着字泪水就忍不住的往下流。每天早上6点起床晚上11点睡觉,年复一年地学到现在,憧憬着一个月赚上万块的幸福生活,憧憬着美好阳光的未来。我打开了手机,看到你的图,我感到了深深的差距,我直接跳进了家门口的井里😭😭😭我真的😭我要嫉妒疯了😭为什么!!为什么这个人不是我😡我求你了😭求你了😭!不要在发了,我真的要羡慕嫉妒疯了😱怎么办我要嫉妒死了啊啊啊啊我急了,手机电脑全砸了,本来就有抑郁症的我,被别人说我破防了,我真的恼羞成怒了,仿佛被看穿了,躲在网络背后的我,这种感觉真的好难受,我被看穿的死死地,短短的破防两个字,我伪装出来的所有的坚强和强颜欢笑全都崩塌了,成了一个被人笑话的小丑🤡,我真的不想再故作坚强了,玩心态我输的什么都不剩😭😭😭
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-30 19:49
牛客798932866号:已经出薪资了嘛
投递汇川技术等公司10个岗位
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务