题目来源:

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的更多相关文章

  1. VS2010类似Eclipse文件查找功能-定位到

    快捷键:Ctrl + , 打开定位到窗口,可以在文件或类文件中查找内容.

  2. Android : 如何在WebView显示的页面中查找内容

    Android : 如何在WebView显示的页面中查找内容 Author : Aoyousatuo Zhao http://blog.sina.com.cn/aoyousatuo WebView是A ...

  3. selenium中的xpath定位

    一.简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. 二.定位 2.1 利用自己的本身属性定位 //标签[文本属性和值] 下面百度的 ...

  4. linux中查找(find、locate、which、whereis、grep)命令汇总、帮助命令(man、whatis、apropos、info、help)汇总

    (一)find命令详解 find:功能:文件搜索: 语法:find[搜索范围][匹配条件]:  只要匹配条件完全符合才可以被显示,使用通配符*匹配条件*则可以显示匹配条件的所有目录,问号?匹配单个字符 ...

  5. Win10系统总是提示"在商店中查找应用"的关闭方法

    Win10系统总是提示"在商店中查找应用"该怎么关闭?win10中打开文件的时候总是提示在商店中查找应用,但是自己的电脑中有程序可以打开这个文件,不需要去商店中下载,该怎么取消这个 ...

  6. BeautifulSoup中查找元素 select() 和find()区别

    从html中查找元素,之前一般都用find(),查找符合条件的第一个,如下 f = open(file, 'r') # 读取文件内容content = f.read()soup= BeautifulS ...

  7. 初探UiAutomator2.0中使用Xpath定位元素

    J 今天的主题是讲一下在使用过程中遇到的一个问题,如何在UiAutomator2.0中使用Xpath定位元素? 背景 现在的app在打包成apk的时候都是有加固处理的,各种混淆加固,所以已经破坏了或扰 ...

  8. [转]grep 在文本中查找内容

    转自: http://www.lampweb.org/linux/3/27.html 功能:grep系列是Linux中使用频率最高的文本查找命令.主要功能在一个或者多个文件中查找特定模式的字符串.如果 ...

  9. 在eclipse中查找指定文件 [多种方法]

    在eclipse中查找指定文件   1.ctrl+h打开搜索界面 File Search: containing text填*,File name patterns填写hello.*,可以找到hell ...

随机推荐

  1. IOS 设置导航栏

    //设置导航栏的标题 self.navigationItem setTitle:@"我的标题"; //设置导航条标题属性:字体大小/字体颜色…… /*设置头的属性:setTitle ...

  2. 【python】属性

    在python中,一切皆是对象(object),对象拥有很多属性(arrtribute) 属性分2种 类属性(class attribute):类自身定义or继承 对象属性(object attrib ...

  3. C#中Dictionary<TKey,TValue>排序方式

    自定义类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy ...

  4. Ubuntu 14.10下搭建简易FTP服务器[vsftpd]

    Ubuntu下公认最易上手的ftp软件是vsftpd,既然标题都说了是“简易”的,那么必然是用最大众的..下面是正题 目标需求:搭建一个允许匿名/本地登录的FTP,并且支持上传/下载/修改功能,同时F ...

  5. JS前台base32加密,C#后台解码

    公司的系统应用后,客户那边用appscan工具检测到严重的漏洞 1.使用 SQL 注入的认证旁路 (1/2)--未对用户输入正确执行危险字符清理 2.已解密的登录请求 (2/2)----诸如用户名.密 ...

  6. RainCup_No.1

    Rain杯No.1 初见篇 本系列故事以及人名地名等纯属虚构,如有雷同,纯属巧合 在极东之地,有一个岛国,与岛国隔了一个海域有一个古老的国度,天朝.天朝T镇有个少年叫小S,故事从小S与少女Rain的相 ...

  7. Appium常用的API函数

    在学习应用一个框架之前,应该了解一下这个框架的整体结构或是相应的API函数.这篇文章还不错:http://blog.sina.com.cn/s/blog_68f262210102vzf9.html,就 ...

  8. callee的用法

    callee返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文.[function.]arguments.callee可选项 function 参数是当前正在执行的 ...

  9. C++ 中堆栈学习

  10. 在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除。

    在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除. 作者:邵盛松 2009-09-05 前言 1关于的BLOB(Binary)数据的存储和读取功能主要参考了MSDN上的一篇& ...