当前位置: 首页 > news >正文

【面试经典150 | 位运算】位1的个数

文章目录

  • 写在前面
  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:循环检查二进制位
    • 方法二:位运算优化
    • 方法三:__builtin_popcount()
  • 写在最后

写在前面

本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……

专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:

  • Tag:介绍本题牵涉到的知识点、数据结构;
  • 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
  • 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
  • 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
  • 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。

Tag

【位运算】


题目来源

191. 位1的个数


题目解读

统计无符号整数的二进制数中字位为 1 的个数。


解题思路

方法一:循环检查二进制位

我们可以从无符号整数对应二进制数的低位到高位来枚举,统计二进制数位为 1 的个数。思想与实现方法都比较简单,直接看下方代码。

实现代码

class Solution {
public:int hammingWeight(uint32_t n) {int res = 0;for (int i = 0; i < 32; ++i) {res += n & 1;n >>= 1;}return res;}
};

复杂度分析

时间复杂度: O ( k ) O(k) O(k) k k k 为无符号整数对应二进制数的长度,这里 k = 32

空间复杂度: O ( 1 ) O(1) O(1)

方法二:位运算优化

利用 n & (n - 1) 每次将二进制位中最低位的 1 转化成 0。我们对无符号整数 n 进行 n & (n - 1) 的迭代操作,直至 n = 0,这中间迭代了多少次,就表明 n 的二进制数中有多少个数位 1

实现代码

class Solution {
public:int hammingWeight(uint32_t n) {int res = 0;while (n) {n &= n - 1;++res;}return res;}
};

复杂度分析

时间复杂度: O ( l o g n ) O(logn) O(logn)

空间复杂度: O ( 1 ) O(1) O(1)

方法三:__builtin_popcount()

直接使用 C++ 中的库函数 __builtin_popcount() 来统计无符号整数 n 中二进制数位为 1 的个数。对应代码为:

class Solution {
public:int hammingWeight(uint32_t n) {return __builtin_popcount(n);}
};

在 python3 中可以使用内置函数 bin() 将整数转换为二进制字符串,并然后统计其中的字符 1 的个数。对应代码为:

class Solution:def hammingWeight(self, n: int) -> int:return bin(n).count('1')

写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

相关文章:

【面试经典150 | 位运算】位1的个数

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;循环检查二进制位方法二&#xff1a;位运算优化方法三&#xff1a;__builtin_popcount() 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…...

vue中数据代理和事件处理

数据代理 直接在对象下可直接修改属性的值&#xff0c;而Object提供defineProperty()对属性进行控制 <script>let perosn {name: 小蜜,sex: 男,//age: 19 }Object.defineProperty(perosn,age,{value: 19//enumerable: true ,添加enumerable将默认值改为true&#xff0c…...

Unity之NetCode多人网络游戏联机对战教程(8)--玩家位置同步

文章目录 前言添加相机玩家添加对应组件服务端权威&#xff08;server authoritative&#xff09;客户端权威&#xff08;client authoritative&#xff09;服务端同步位置阅读与理解PlayerTransformSync.csNetworkVariableUploadTransformSyncTransform 后话 前言 承接上篇&a…...

spring boot 中@Value读取中文配置时乱码

1.spring boot 读取application.properties 该文件是iso8859编码 如果是直接写中文 读取时会乱码 显示成?? 必须得转ascii码才能正常显示 其他方法测试也不行 Value("${apig.order.tiaokong.qianzi}") private String apigOrderTiaokongQianzi;...

选择.NET 还是 Java?

1、.NET Framework的演变&#xff1a; .NET Framework&#xff1a; 最初由Microsoft引入&#xff0c;是一个Windows上的全功能框架。它包含了ASP.NET、Windows Presentation Foundation&#xff08;WPF&#xff09;、Windows Communication Foundation&#xff08;WCF&#xff…...

vue 高阶组件;高阶组件

vue 高阶组件;高阶组件 文章目录 vue 高阶组件;高阶组件1. 什么是高阶组件2. 高阶组件的作用3. 高阶组件的使用 例子1&#xff1a;创建一个简单的高阶组件例子2&#xff1a;使用element-ui的高阶组件 1. 什么是高阶组件 高阶组件是一个函数&#xff0c;传给它一个组件&#xf…...

数据结构:树的基本概念(二叉树,定义性质,存储结构)

目录 1.树1.基本概念1.空树2.非空树 2.基本术语1.结点之间的关系描述2.结点、树的属性描述3.有序树、无序树4.森林 3.树的常考性质 2.二叉树1.基本概念2.特殊二叉树1.满二叉树2.完全二叉树3.二叉排序树4.平衡二叉树 3.常考性质4.二叉树的存储结构1.顺序存储2.链式存储 1.树 1.…...

【Qt之QStandardItemModel类】介绍

描述 QStandardItemModel类提供了一个通用的模型&#xff0c;用于存储自定义数据。QStandardItemModel可以用作Qt标准数据类型的存储库。它是 Model/View类 之一&#xff0c;是 Qt的model/view框架 的一部分。 QStandardItemModel提 供了一种基于项目的传统方法来处理模型。 Q…...

01-Spring中的工厂模式

工厂模式 工厂模式的三种形态: 工厂模式是解决对象创建问题的属于创建型设计模式,Spring框架底层使用了大量的工厂模式 第一种&#xff1a;简单工厂模式是工厂方法模式的一种特殊实现,简单工厂模式又叫静态工厂方法模式不属于23种设计模式之一第二种&#xff1a;工厂方法模式…...

Linux是什么,Linux系统介绍

很多小伙伴都不是那么了解和知道Linux&#xff0c;到底Linux是什么&#xff1f; 像大家用到的安卓手机&#xff0c;生活中用到的各种智能设备&#xff0c;比如路由器&#xff0c;光猫&#xff0c;智能家具等&#xff0c;很多都是在Linux操作系统上。 Linux是什么&#xff1f;Li…...

爬虫项目(11):使用多线程对36手机高清壁纸批量抓取

文章目录 书籍推荐目标网址单线程实现多线程实现爬取结果书籍推荐 如果你对Python网络爬虫感兴趣,强烈推荐你阅读《Python网络爬虫入门到实战》。这本书详细介绍了Python网络爬虫的基础知识和高级技巧,是每位爬虫开发者的必读之作。详细介绍见👉: 《Python网络爬虫入门到…...

JavaScript_动态表格_删除功能

1、动态表格_删除功能 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>动态表格_添加和删除功能</title><style>table{border: 1px solid;margin: auto;width: 100%;}td,th{text-align: …...

一步一步开发微信小程序(Django+Mysql)

前提&#xff1a;假设你已经安装好Anaconda&#xff0c;微信开发者工具&#xff0c;MySQL数据库&#xff0c;IDE等工具 工具下载地址&#xff1a; Anaconda&#xff1a;https://www.anaconda.com/download MySQL&#xff1a;https://dev.mysql.com/downloads/mysql/ 微信开…...

mysql 讲解(1)

文章目录 前言一、基本的命令行操作二、操作数据库语句2.1、创建数据库2.2、删除数据库2.3、使用数据库2.4 查看所有数据库 三、列的数据类型3.1 字符串3.2 数值3.3 时间日期3.4 空3.5 int 和 varchar问题总结&#xff1a; 四、字段属性4.1 UnSigned4.2 ZEROFILL4.3 Auto_InCre…...

k8s关于metadata、spec.containers、spec.volumes的属性介绍(yaml格式)

目录 一.metadata常用属性 二.spec.containers子属性介绍 explain pod.spec.containers给出的参考 1.command示例演示 2.env和envFrom示例演示 3.ports部分详解 4.resources部分详解 5.startupProbe格式演示 6.terminationMessagePath和terminationMessagePolicy格式演…...

腾讯域名优惠卷领取

腾讯域名到到期了&#xff0c;听说申请此计划&#xff0c;可获得优惠卷&#xff0c;看到网上5年域名只需要10元&#xff0c;姑且试试看。 我的博客即将同步至腾讯云开发者社区&#xff0c;邀请大家一同入驻&#xff1a;https://cloud.tencent.com/developer/support-plan?in…...

elastic-job 完结篇

一 elastic-job 1.1 案例场景分析 1.设置4个分片&#xff0c;10秒执行一次。 分片弹性扩容缩容机制测试&#xff1a; 测试1&#xff1a;测试窗口1不关闭&#xff0c;再次运行main方法查看控制台日志&#xff0c;注意修改application.properties中的 server.port&#xf…...

基于 Gin 的 HTTP 代理 demo

上次用 TCP 模拟了一个 HTTP 代理之后&#xff0c;感觉那样还是太简陋了&#xff0c;想着是不是可以用框架来做一个有点实际用处的东西。所以&#xff0c;就思索如何用 golang 的 Gin 框架来实现一个&#xff1f;嗯&#xff0c;对的你没有听错&#xff0c;是 gin 框架。你可能会…...

【ATTCK】MITRE Caldera - 测试数据泄露技巧

CALDERA是一个由python语言编写的红蓝对抗工具&#xff08;攻击模拟工具&#xff09;。它是MITRE公司发起的一个研究项目&#xff0c;该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的&#xff0c;能够较真实地APT攻击行为模式。 通过CALDERA工具&#xff0c;安全…...

【数据结构】树与二叉树(十二):二叉树的递归创建(算法CBT)

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…...

3步掌握RePKG工具:从Wallpaper Engine资源提取到项目重构的实战指南

3步掌握RePKG工具&#xff1a;从Wallpaper Engine资源提取到项目重构的实战指南 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾经看着Wallpaper Engine中精美的动态壁纸&a…...

并发程序的隐形杀手:深入浅出 CPU 伪共享与性能优化

一、一个诡异的性能瓶颈 在性能调优中,我们经常遇到这样的场景:代码逻辑极其简单,线程间几乎无数据竞争,锁的使用也降到了最低,但程序的吞吐量就是无法随 CPU 核心数线性增长。例如下面这段用两个线程分别累加两个独立变量的 Java 代码: 两个线程各自修改 `Counter` 对象…...

Youtu-Parsing开源文档解析模型详解:像素级定位+RAG就绪JSON/Markdown输出

Youtu-Parsing开源文档解析模型详解&#xff1a;像素级定位RAG就绪JSON/Markdown输出 你是不是经常遇到这样的烦恼&#xff1f;拿到一份扫描的PDF合同&#xff0c;想把里面的表格数据提取出来&#xff0c;结果复制粘贴后格式全乱了&#xff1b;或者收到一张带公式的学术论文截…...

Kandinsky-5.0-I2V-Lite-5s本地化部署精讲:JDK环境配置与Docker封装

Kandinsky-5.0-I2V-Lite-5s本地化部署精讲&#xff1a;JDK环境配置与Docker封装 1. 开篇&#xff1a;为什么选择本地化部署 如果你正在寻找一个高效的图像转视频解决方案&#xff0c;Kandinsky-5.0-I2V-Lite-5s绝对值得考虑。这个轻量级模型能够在5秒内完成图像到视频的转换&…...

轻量级替代方案:OpenClaw+Phi-3-vision-128k-instruct在树莓派上的极限部署

轻量级替代方案&#xff1a;OpenClawPhi-3-vision-128k-instruct在树莓派上的极限部署 1. 为什么要在树莓派上折腾多模态AI&#xff1f; 去年夏天&#xff0c;我在整理家庭照片时突然意识到一个问题&#xff1a;现有的云相册服务虽然方便&#xff0c;但自动分类和搜索功能总是…...

需求用例的写法

一、为什么写需求用例 流程图为需求用例提供了关键路径&#xff0c;而需求用例则是对业务场景的全面还原。本文将从以下四个方面阐述用例的信息&#xff1a; 用例的定义用例的粒度用例的例子用例的关键点解释 我写需求文档有几大准则&#xff0c;是需要时刻铭记和实践的&…...

【2026年最新600套毕设项目分享】微信小程序的医院核酸检测服务系统(30011)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告/任务书&#xff09;远程调试控屏包运行一键启动项目&…...

html怎么转rollup plugin html_Rollup如何通过插件处理HTML入口

rollup-plugin-html 未生效的根本原因是 Rollup 默认不处理 HTML&#xff0c;需将 html() 插件置于 resolve() 和 commonjs() 之前&#xff0c;并配置 transformers、路径映射及环境变量注入方式。rollup-plugin-html 为什么没生效&#xff1f;常见现象是 HTML 文件被当成普通资…...

ITG3200陀螺仪驱动开发:寄存器配置、多量程切换与FreeRTOS集成

1. ITG3200陀螺仪驱动库技术解析与工程实践ITG3200是InvenSense公司于2009年前后推出的单芯片三轴数字陀螺仪传感器&#xff0c;采用MEMS工艺制造&#xff0c;集成16位ADC、数字温度传感器、可编程低通滤波器及IC/SPI双接口。尽管该器件已停产多年&#xff0c;但在工业控制、无…...

Spring Boot 与 GraalVM 原生镜像 2026:极致性能优化

Spring Boot 与 GraalVM 原生镜像 2026&#xff1a;极致性能优化 今天我们来聊聊 Spring Boot 与 GraalVM 原生镜像&#xff0c;这是实现 Java 应用极致性能优化的重要技术。 一、什么是 GraalVM 原生镜像 GraalVM 原生镜像&#xff08;Native Image&#xff09;是一种提前编译…...