zoukankan      html  css  js  c++  java
  • 【LeetCode】191. Number of 1 Bits

    题目:

    编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

    思路:

    从输入数字二进制的最后一位开始,判断是否为1。

    位运算。A & 0 = 0, A & 1 = A。

    每次与1进行&运算(即最后一位),若结果为1,计数加1,否则计数不变,然后将二进制数字右移一位。如此循环。

    #include <stdio.h>
    #include <stdint.h>
    
    int hammingWeight(uint32_t n) {
        int count = 0;
        while (n > 0) {
            if ( (n & 1) == 1 )
                count++;
            n = n >> 1;
        }
        return count;
    }
    
    int main()
    {
        uint32_t n1 = 00000000000000000000000000001011;
        uint32_t n2 = 00000000000000000000000010000000;
        printf("%d
    ", hammingWeight(n1));
        printf("%d
    ", hammingWeight(n2));
        return 0;
    }

    结果:

    结果不错,排名在最前面那一小撮中。位运算的速度还是相当快的。


    思路2:

    先把代码贴出来。

    int hammingWeight2(uint32_t n) {
        int m_1 = 0x55555555;
        int m_2 = 0x33333333;
        int m_4 = 0x0f0f0f0f;
        int m_8 = 0x00ff00ff;
        int m_16 = 0x0000ffff;
    
        int a = (n & m_1) + ((n >> 1) & m_1);
        int b = (a & m_2) + ((a >> 2) & m_2);
        int c = (b & m_4) + ((b >> 4) & m_4);
        int d = (c & m_8) + ((c >> 8) & m_8);
        int e = (d & m_16) + ((d >> 16) & m_16);
    
        return e;
    }

    参考:一起玩算法05

    推荐一位干货up主:正月点灯笼

  • 相关阅读:
    Mutex和RWMutex
    内核态和用户态
    runtime源码
    goroutine的结束与通信
    进程线程协程
    堆和栈
    array和slice区别
    逃逸分析
    单例模式
    WaitGroup用法
  • 原文地址:https://www.cnblogs.com/ME-WE/p/12433595.html
Copyright © 2011-2022 走看看