关于u32中查找和定位最后到bit Number of 1 Bits
题目来源:
https://leetcode.com/problems/number-of-1-bits/
刷leetcode的时候发现了这个题目。
作为常年跑底层嵌入式的我,对于这种题目兴趣还是很浓厚的
class Solution {
public:
int hammingWeight(uint32_t n) {
int cnt = ;
for(int i=;i<;i++){
if((n&(<<i)) !=){
cnt ++;
}
}
return cnt;
}
};
第一时间想到的方法是这个。
然后跑完通过 600个testcase之后是13ms 功能无问题
然后我就想着,如果bit数量不多的话,其实是有很多冗余计算的,所以就换了这个方法。
class Solution {
public:
int hammingWeight(uint32_t n) {
int cnt = ;
while(n != ){
cnt++;
uint32_t tmp = ((n-)^n)+;
if(tmp == ){
n -= 0x80000000;
}else{
n -= tmp>>;
}
}
return cnt;
}
};
这次是10ms了。。。好吧,确实没提高多少。
后来跟群里的交流的时候才发现。
是自己陷进去了。因为我在实际需求的时候是需要提取出来最后一个bit的。
但是实际这个题目中并不需要知道这个信息
而这个方法快主要是快在
n=n&(n-)
只需要处理最后一个bit并清除就好。
于是乎,速度再次提升1倍
int hammingWeight(uint32_t n) {
int cnt=;
while(n!=){
cnt++;
n=n&(n-);
}
return cnt;
}
到这里基本上到头了。
但是。。。丧心病狂的空间换时间不是还没用到嘛。。
还有一个方法,就是把u32变成4个u8然后查表相加。。。
考虑到 不是很实用,实际速度上也不一定有很大突破。不纠结了,以后闲的无聊了在折腾下
关于u32中查找和定位最后到bit Number of 1 Bits的更多相关文章
- VS2010类似Eclipse文件查找功能-定位到
快捷键:Ctrl + , 打开定位到窗口,可以在文件或类文件中查找内容.
- Android : 如何在WebView显示的页面中查找内容
Android : 如何在WebView显示的页面中查找内容 Author : Aoyousatuo Zhao http://blog.sina.com.cn/aoyousatuo WebView是A ...
- selenium中的xpath定位
一.简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. 二.定位 2.1 利用自己的本身属性定位 //标签[文本属性和值] 下面百度的 ...
- linux中查找(find、locate、which、whereis、grep)命令汇总、帮助命令(man、whatis、apropos、info、help)汇总
(一)find命令详解 find:功能:文件搜索: 语法:find[搜索范围][匹配条件]: 只要匹配条件完全符合才可以被显示,使用通配符*匹配条件*则可以显示匹配条件的所有目录,问号?匹配单个字符 ...
- Win10系统总是提示"在商店中查找应用"的关闭方法
Win10系统总是提示"在商店中查找应用"该怎么关闭?win10中打开文件的时候总是提示在商店中查找应用,但是自己的电脑中有程序可以打开这个文件,不需要去商店中下载,该怎么取消这个 ...
- BeautifulSoup中查找元素 select() 和find()区别
从html中查找元素,之前一般都用find(),查找符合条件的第一个,如下 f = open(file, 'r') # 读取文件内容content = f.read()soup= BeautifulS ...
- 初探UiAutomator2.0中使用Xpath定位元素
J 今天的主题是讲一下在使用过程中遇到的一个问题,如何在UiAutomator2.0中使用Xpath定位元素? 背景 现在的app在打包成apk的时候都是有加固处理的,各种混淆加固,所以已经破坏了或扰 ...
- [转]grep 在文本中查找内容
转自: http://www.lampweb.org/linux/3/27.html 功能:grep系列是Linux中使用频率最高的文本查找命令.主要功能在一个或者多个文件中查找特定模式的字符串.如果 ...
- 在eclipse中查找指定文件 [多种方法]
在eclipse中查找指定文件 1.ctrl+h打开搜索界面 File Search: containing text填*,File name patterns填写hello.*,可以找到hell ...
随机推荐
- dedecms qq咨询平均分配
qq后台页: qq_admin.php <style type="text/css"> <!-- * {margin:0; padding:0;} .wrap { ...
- Haar-like特征
参考文献: [1]Viola P, Jones M. Rapid object detection using a boosted cascade of simple features[C]//Com ...
- SQL变量、Substring、charindex、case函数、去除重复
isnull(aa,0)删除表数据: truncate table aaa 添加字段: ALTER TABLE table1 ADD col1 varchar(200) DEFAULT '2008 ...
- java类中成员的划分
- IIS7+windows 64位配置注意事项
问题和解决办法 1 如果网站为Asp:再asp中注意启用父路径 2 操作必须使用一个可更新的查询:给用户iis_iusrs 一个完全控制的权限 3 Windows(64位IIS)未在本地计算机上 ...
- popen使用不当引起产生僵尸进程
FILE * popen(const char * command, const char * type)popen函数会通过fork产生子进程,然后从子进程中调用/bin/sh -c执行参数comm ...
- layer弹框
官网http://layer.layui.com/ /!*如果是页面层*/layer.open({ type: 1, content: '传入任意的文本或html' //这里content是一个普通的 ...
- Linux下memcache的安装
memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.目前用memcache解决互联网上的大用户读取是非常流行的一种用法,在互联网企业中有着广泛的应用.关 ...
- 7、provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错
在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败.(provider: SQL 网络接口, error ...
- Android模拟器Genymotion如何访问本地服务器?
Genymotion能否访问到本地服务器,其实与Genymotion本身并无太大关系.Genymotion作为VirtualBox中的一个虚拟OS运行,所以它访问网络的方式与其他VirtualBox中 ...