博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于u32中查找和定位最后到bit Number of 1 Bits
阅读量:4614 次
发布时间:2019-06-09

本文共 1052 字,大约阅读时间需要 3 分钟。

题目来源:

https://leetcode.com/problems/number-of-1-bits/

刷leetcode的时候发现了这个题目。

作为常年跑底层嵌入式的我,对于这种题目兴趣还是很浓厚的

class Solution {public:    int hammingWeight(uint32_t n) {        int cnt = 0;        for(int i=0;i<32;i++){            if((n&(1<

第一时间想到的方法是这个。

然后跑完通过 600个testcase之后是13ms 功能无问题

 

然后我就想着,如果bit数量不多的话,其实是有很多冗余计算的,所以就换了这个方法。

class Solution {public:    int hammingWeight(uint32_t n) {        int cnt = 0;        while(n != 0){            cnt++;            uint32_t tmp = ((n-1)^n)+1;            if(tmp == 0){                n -= 0x80000000;            }else{                n -= tmp>>1;            }        }        return cnt;    }};

这次是10ms了。。。好吧,确实没提高多少。

后来跟群里的交流的时候才发现。

是自己陷进去了。因为我在实际需求的时候是需要提取出来最后一个bit的。

但是实际这个题目中并不需要知道这个信息

而这个方法快主要是快在

n=n&(n-1)

只需要处理最后一个bit并清除就好。

于是乎,速度再次提升1倍

int hammingWeight(uint32_t n) {    int cnt=0;    while(n!=0){        cnt++;        n=n&(n-1);    }    return cnt;}

到这里基本上到头了。

但是。。。丧心病狂的空间换时间不是还没用到嘛。。

还有一个方法,就是把u32变成4个u8然后查表相加。。。

考虑到 不是很实用,实际速度上也不一定有很大突破。不纠结了,以后闲的无聊了在折腾下

 

转载于:https://www.cnblogs.com/jasonbu/p/4455156.html

你可能感兴趣的文章
[转]免费api大全
查看>>
git 认证问题之一的解决 : http ssh 互换
查看>>
sql where 1=1作用
查看>>
搜索算法----二分查找
查看>>
Python语言编程
查看>>
[poj 1469]Courses
查看>>
vue+element-ui实现表格checkbox单选
查看>>
测试开发学习进阶教程 视频&PDF
查看>>
C#基础-连接Access与SQL Server
查看>>
autofac
查看>>
MacOS 系统终端上传文件到 linux 服务器
查看>>
Excel导出POI
查看>>
兼容性
查看>>
自动执行sftp命令的脚本
查看>>
转 Merkle Tree(默克尔树)算法解析
查看>>
网络编程基础之socket编程
查看>>
各种浏览器的user-agent和
查看>>
Restful levels
查看>>
Phonegap移动开发:布局总结(一) 全局
查看>>
Java 变参函数的实现
查看>>