[LeetCode]problem 191. Number of 1 Bits

原创 2016年05月31日 15:44:15

TAG

位操作

汉明重量 HammingWeight

link

方法

非常有背景的一道题。

讨论见stack-overflow

详细见维基百科-汉明重量 or Wikipedia-Hamming Weight

总的来说,这是经典的“汉明距离(Hamming Weight)”问题,由于在密码学、编码理论、信息论中常用到计算数据位中1的个数,所以有的CPU(X86)是有单独的指令(popcnt)来做这个操作的,GCC下有函数__builtin_popcount(unsigned int x), MSVC下有__popcnt(unsigned int value)(

代码

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int oneBitCnt = 0 ;
        while(n)
        {
            if( (n & 1) == 1 ) { ++ oneBitCnt ;}
            n = n >> 1 ;
        }
        return oneBitCnt ;
    }
};

后记

上述代码实现是算是最LOW的方法,时间消耗上与使用__builtin_popcount(unsigned)方法相同(leetcode平台),耗时8ms;使用标准库std::bitset<32>(n).count()耗时4ms。

最后,上述代码有改进空间,就是去掉if语句: oneBitCnt += n & 1

理论上去掉if是更好的选择…我看维基百科中甚至有把循环展开写的…

! 结果更新,当我去掉if后,耗时变为4ms!当然,我不知道背后发生了什么… 不知道是if给流水带来的影响,还是编译器的优化.

说起优化,想起之前看到的一句话——不懂原理的优化简直就是邪恶。所以,咱们暂时就这么写着,以后也不必刻意在乎if是否存在… 因为这种层次上优化,往往需要深厚的对编译的理解。此刻我还不懂,也暂时不必深究。

版权声明:本文为博主原创文章[在个人GitHub上可能有相同技术文档],未经博主允许不得转载。

相关文章推荐

LeetCode 191. Number of 1 Bits

Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also know...

【leetcode】191. Number of 1 Bits

一、题目描述 Write a function that takes an unsigned integer and returns the number of ’1' bits it ha...

Leetcode 191 Number of 1 Bits

Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also know...

leetCode 191. Number of 1 Bits

题目链接:https://leetcode.com/problems/number-of-1-bits/     题目内容: Write a function that takes an unsi...

LeetCode笔记:191. Number of 1 Bits

判断一个无符号数的二进制有多少个1

LeetCode 191.Number of 1 Bits 解题报告

LeetCode 191.Number of 1 Bits 解题报告

[LeetCode][191][Number of 1 Bits]

题目链接:https://leetcode.com/problems/number-of-1-bits/ 题目描述: Write a function that takes an unsigned ...

leetCode191/201/202/136 -Number of 1 Bits/Bitwise AND of Numbers Range/Happy Number/Single Number

链接:https://leetcode.com/problems/number-of-1-bits/ 此题关键是如何判断一个数字的第i为是否为0  即: x& (1 class Solution { ...

[191] Number of 1 Bits

给定一个整数,统计这个32位整数中1的数量。
  • camlot_
  • camlot_
  • 2016年06月27日 20:23
  • 191

148. Sort List\191. Number of 1 Bits\476. Number Complement\342. Power of Four

题目描述 代码实现题目描述Sort a linked list in O(n log n) time using constant space complexity.对一个链表进行排序,时间复杂度为O...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode]problem 191. Number of 1 Bits
举报原因:
原因补充:

(最多只允许输入30个字)