(位运算) 剑指 Offer 15. 二进制中1的个数 ——【Leetcode每日一题】

news2025/1/19 15:57:54

❓ 剑指 Offer 15. 二进制中1的个数

难度:简单

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。

提示

  • 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
  • 在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3

示例 1:

输入:n = 11 (控制台输入 00000000000000000000000000001011)
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。

示例 2:

输入:n = 128 (控制台输入 00000000000000000000000010000000)
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 ‘1’。

示例 3:

输入:n = 4294967293 (控制台输入 11111111111111111111111111111101,部分语言中 n = -3)
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 ‘1’。

提示

  • 输入必须是长度为 32 的 二进制串

注意:本题与 191. 位1的个数 相同。

💡思路:

基础知识必知:一篇文章搞懂位运算!!!

n&(n-1) 位运算可以将 n 的位级表示中最低的那一位 1 设置为 0。不断将 1 设置为 0,直到 n 为 0。
在这里插入图片描述

🍁代码:(C++、Java)

C++

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

Java

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int ans = 0;
        while(n != 0){
            n &= (n - 1);
            ans++;
        }
        return ans;
    }
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( l o g n ) O(logn) O(logn),循环次数等于 n 的二进制位中 1的个数,最坏情况下n` 的二进制位全部为 1。我们需要循环 O ( l o g n ) O(logn) O(logn) 次。。
  • 空间复杂度 O ( n ) O(n) O(n),我们只需要常数的空间保存若干变量。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/966925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

非科班菜鸡算法学习记录 | 代码随想录算法训练营第53天|| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划

1143. 最长公共子序列 知识点:动规 状态:不会 思路: 用dpij表示两个串中到i-1和j-1个字符结束的最长公共子序列长度(不用特殊初始化) class Solution { public:int longestCommonSubsequence(string text1, string …

操作系统的发展和分类

注意:每个阶段的主要优点都是解决了上个阶段的缺点 1.手工操作阶段 概括:一个用户在一段时间内独占全机,导致资源利用率极低,用户输入指令给机器,然后机器运行响应给用户。 2.批处理阶段 2.1单道批处理系统 优点&…

leetcode622-设计循环队列

本题重点: 1. 选择合适的数据结构 2. 针对选择的数据结构判断“空”和“满” 这两点是不分先后次序的,在思考时应该被综合起来。事实上,无论我们选择链表还是数组,最终都能实现题中描述的“循环队列”的功能,只不过…

数学建模-点评笔记 9月3日

1.摘要:关键方法和结论(精炼的语言)要说明,方法的合理性和意义也可以说明。 评委先通过摘要筛选(第一轮) 2.时间序列找异常值除了3西格玛还有针对时间序列更合适寻找的方法 3.模型的优缺点要写的详细一点…

编写一个这样的程序,满足五日均线,十日均线,二十日均线,六十天六日均线调头向上的选股代码

编写一个这样的程序,满足五日均线,十日均线,二十日均线,六十天六日均线调头向上的选股代码 以下是一个用C语言编写的程序,可以读取股票数据并筛选出满足条件的股票。程序使用了一个假设的股票数据文件格式&#xff0c…

将帅要避免五个方面的弱点:蛮干、怕死、好名、冲动、溺爱民众

将帅要避免五个方面的弱点:蛮干、怕死、好名、冲动、溺爱民众 【安志强趣讲《孙子兵法》第28讲】 【原文】 是故屈诸侯者以害,役诸侯者以业,趋诸侯者以利。 【注释】 趋:归附、依附。 【趣讲白话】 所以,用祸患威逼诸侯…

IDM2024Internet Download Manager下载器最新版本

IDM(Internet Download Manager)下载器主窗口的左侧是下载类别的分类,提供了分类功能来组织和管理文件。如果不需要它,可以删除“分类”窗口,并且在下载文件时不选择任何分类。 每个下载类别都有一个名称,…

ARM编程模型-常用指令集

一、ARM指令集 ARM是RISC架构,所有的指令长度都是32位,并且大多数指令都在一个单周期内执行。主要特点:指令是条件执行的,内存访问使用Load/store架构。 二、Thumb 指令集 Thumb是一个16位的指令集,是ARM指令集的功能…

Go实现LogCollect:海量日志收集系统【下篇——开发LogTransfer】

Go实现LogAgent:海量日志收集系统【下篇】 0 前置文章 Go实现LogAgent:海量日志收集系统【上篇——LogAgent实现】 前面的章节我们已经完成了日志收集(LogAgent),接下来我们需要将日志写入到kafka中,然后…

后端SpringBoot+前端Vue前后端分离的项目(一)

前言:后端使用SpringBoot框架,前端使用Vue框架,做一个前后端分离的小项目,需求:实现一个表格,具备新增、删除、修改的功能。 一、数据库表的设计 设计了一个merchandise表,id是编号&#xff0c…

基于Matlab利用IRM和RRTstar实现无人机路径规划(附上源码+数据+说明+报告+PPT)

无人机路径规划是无人机应用领域中的关键问题之一。本文提出了一种基于IRM(Informed RRTstar Method)和RRTstar(Rapidly-exploring Random Tree star)算法的无人机路径规划方法,并使用Matlab进行实现。该方法通过结合I…

【LeetCode-中等题】994. 腐烂的橘子

文章目录 题目方法一:bfs层序遍历 题目 该题值推荐用bfs,因为是一层一层的感染,而不是一条线走到底的那种,所以深度优先搜索不适合 方法一:bfs层序遍历 广度优先搜索,就是从起点出发,每次都尝…

无涯教程-JavaScript - VARP函数

VARP函数取代了Excel 2010中的VAR.P函数。 描述 该函数根据整个总体计算方差。 语法 VARP (number1,[number2],...)争论 Argument描述Required/OptionalNumber1The first number argument corresponding to a population.RequiredNumber2...Number arguments 2 to 255 cor…

Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】

Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】 下篇:Go实现LogCollect:海量日志收集系统【下篇——开发LogTransfer】 项目架构图: 0 项目背景与方案选择 背景 当公司发展的越来越大,业务越来越复杂…

Web of Science批量导出

目录 如何用Web of Science检索学术信息问题批量导出 Web of Science检索结果 如何用Web of Science检索学术信息 进入 Web of Science 检索页面: https://www.webofscience.com/wos/woscc/basic-search 根据需求填写过滤条件,点击 search 进入搜索详…

Stable Diffusion---Ai绘画-下载-入门-进阶(笔记整理)

前言 注:本文偏向于整理,都是跟着大佬们学的。 推荐两个b站up主,学完他们俩的东西基本就玩转SD为底的ai绘画: 秋葉aaaki,Nenly同学 1.首先SD主流的就是秋叶佬的Webui了,直接压缩包下载即可,下…

TCP三次握手四次挥手总结

目录 一、两种传输模式: 二、数据方向: 三、端口的作用: 四、端口类型: 五、三次握手: 六、四次断开 常见面试题 TCP(Transfer control protocol)传输控制协议 一、两种传输模式&#x…

计算机毕业设计 校园二手交易平台 Vue+SpringBoot+MySQL

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师,全栈领域优质创作者。 项目内容…

PYTHON知识点学习-空语句和条件语句

空语句: 虽然条件满足时啥也不做,但是由于python对于语法格式,尤其是缩进和代码块的要求较高,所以如果啥都不写(只写注释)是不符合语法要求的. 报错原因:if后面需要带缩进块------>所以可以使用一个空语句pass进行占位 pass--空语句,无实际意义,啥都不想做时利用它进行占位 …

使用多线程导入大量数据,多线程事物控制

本文主要讲述通过Spring Boot MyBatis做大数据量数据插入的案例和结果 不分批次直接梭哈 MyBatis直接一次性批量插入30万条,代码如下: Test public void testBatchInsertUser() throws IOException {InputStream resourceAsStream Resources.getResou…