关于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 ...
随机推荐
- mysql 查询优化
不说话,先贴代码 public PageResult<BoTmcRaw> getLargeList(BaseCondition baseCondition) { PageResult< ...
- JAVA第四周作业
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream; ...
- JAVA 内部类 泛型 实现堆栈
堆栈类: package c15; public class LinkedStack<T> { private static class Node<T> { T item ; ...
- 【转】 shell 判断语句
转自:http://see.sl088.com/wiki/Shell_%E4%B8%AD%E6%8B%AC%E5%8F%B7 test 和 [] test -z string 判定字串是否為 0 ?若 ...
- 2014年6月份第4周51Aspx源码发布详情
通用医院会员管理系统源码 2014-6-23 [VS2010]功能介绍:本系统共包括以下模块:会员开卡管理.会员充值管理.会员消费管理.会员病例管理.客户预约管理.系统信息管理(门诊管理.卡类型管理 ...
- C++中const关键字的使用总结
C++中使用const关键字来修饰常量,下面从两个方面总结:变量和成员函数. 变量:const可以修饰普通变量.指针(数组)和结构体. 1.const修饰普通变量是最简单的情形.这样的用法多为在程序中 ...
- C语言状态机
转载声明 如果转载本博客内容,请联系869119842@qq.com,获得作者书面授权 前言 状态机的好处不用多说,自己百度去,但传统的编程模式,无论是C语言,或是硬件FPGA的Verilog都是采用 ...
- PIC XC8 EEPROM操作
要做一个报警功能的东东,要求可以通过遥控来改变遥控内容.由于对系统的稳定性要求很高,所以用了看门狗. 可是看门狗复位会引起所有寄存器重置,恢复到默认状态.遥控要改变的内容也被复位了,所以只能借助EEP ...
- 安装Eclipse环境变量的配置,
window7系统下的 步骤: 第一步:先安装JDK(记住你安装的位置)我安装在D:\Program Files\Java 目录下. 第二步:JDK安装好后,配置环境变量(重 ...
- BZOJ 1584 DP
显然序列不能超过sqrt(n),因为最差情况是每个都独立答案为n #include <iostream> #include <cstring> #include <cst ...