[LeetCode][LCR133]位 1 的个数——快速从右边消去1

题目

LCR 133. 位 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 题相同:https://leetcode-cn.com/problems/number-of-1-bits/

思考

  1. 这道题直接使用循环右移依次判断是最直观的想法,而且由于最多只有32位,也就是循环32次而已,时间复杂度很低
  2. 那有没有什么方法可以有几个1就判断多少次,而不额外判断0,使用下面这种解法就可以做到

解法

  • 思想:从最右边的1开始,每次都消去一个1
  • 当 n-1 时,可以让一个数最右边的 1 变成 0,而且这个 1 右边的 0 都变成 1(10101000 -> 10100111)
  • 此时使用 n & n-1,可以让这个 n 最右边的 1 变成 0,而且由于这个 1 已经是 n 最右边的 1 了,所以这个 1 的右边都是 0,此时与上 n-1,虽然 n-1 将 n 最右边的 1 右边的 0 都变成了 1,但是与上 n 后这些 1 都无法起作用
  • 最终相当于消去了 n 最右边的 1,有几个 1 就执行几次操作,比起直接循环少了对 0 位的判断

在这里插入图片描述
图片来自:https://leetcode.cn/leetbook/read/illustration-of-algorithm/5vgz7m/


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

静态路由协议实验1

要求: 使用静态路由协议使得全网可达。 第一步、规划IP地址。并配置IP。 第二步、写静态路由 [r1]ip route-static 192.168.3.0 24 192.168.2.2 [r1]ip route-static 192.168.4.0 24 192.168.2.2 [r1]ip route-static 192.168.5.0 24 192.168.2.2[r2]ip route-st…

计算机中丢失steam_api64.dll怎么办?七个方法教你轻松解决

在计算机使用过程中,我们经常会接触到各种各样的动态链接库(DLL)文件。其中,steamapi64.dll是Steam游戏平台中的一个关键组件,它为Windows操作系统带来了许多好处。本文将详细介绍steamapi64.dll对Windows的好处以及其…

用顺序表实现通讯录

前言 这次的通讯录是基于上一篇的动态顺序表的基础上实现的,如果对动态顺序表不熟悉,可以打开这个链接阅读http://t.csdnimg.cn/9zJ5g,这里我们会调用动态顺序表的函数。 如果想看静态顺序表实现通讯录,可以打开这个链接阅读http:…

thinkphp6入门(21)-- 如何删除图片、文件

假设文件的位置在 /*** 删除文件* $file_name avatar/20240208/d71d108bc1086b498df5191f9f925db3.jpg*/ function deleteFile($file_name) {// 要删除的文件路径$file app()->getRootPath() . public/uploads/ . $file_name; $result [];if (is_file($file)) {if (unlin…

Vite 项目中环境变量的配置和使用

Vite 项目中环境变量的声明 我们要在 Vite 项目中进行环境变量的声明,那么需要在项目的根目录下,新建 .env.[mode] 文件用于声明环境变量,如: .env.test 文件用于测试环境下项目全局变量的声明.env.dev 文件用于开发环境下项目全…

创意绘图小程序:绘画与实用功能的完美融合

创意绘图小程序:绘画与实用功能的完美融合 在数字化时代,创意绘图小程序以其便捷性、互动性和创新性,成为了人们表达自我、释放创意的新平台。本文将介绍一款集白板画、黑板画功能于一身,同时融合画笔调整、画布清空、橡皮擦清除…

在线考试|基于Springboot的在线考试管理系统设计与实现(源码+数据库+文档)

在线考试管理系统目录 目录 基于Springboot的在线考试管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台: 2、后台 管理员功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主…

C语言动态内存空间分配

1. 前言 在讲内存分配前,咱来聊一下为什么会有内存分配这个概念呢,大家都知道C语言当中是有着许多的数据类型,使用这些数据类型就会在内存上开辟其相对应的空间,那既然会开辟相应的空间,为什么还会有内存分配呢&#x…

【数据库】数据库的介绍、分类、作用和特点,AI人工智能数据如何存储

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《数据库》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识…

深度学习理论基础(三)封装数据集及手写数字识别

目录 前期准备一、制作数据集1. excel表格数据2. 代码 二、手写数字识别1. 下载数据集2. 搭建模型3. 训练网络4. 测试网络5. 保存训练模型6. 导入已经训练好的模型文件7. 完整代码 前期准备 必须使用 3 个 PyTorch 内置的实用工具(utils): ⚫…

蓝桥杯 - 穿越雷区

解题思路: dfs 方法一: import java.util.Scanner;public class Main {static char[][] a;static int[][] visited;static int[] dx { 0, 1, 0, -1 };static int[] dy { 1, 0, -1, 0 };static long min Long.MAX_VALUE;static long count 0;publi…

先进电气技术 —— (控制理论)何为稳定性?

一、系统稳定性 在控制理论中,系统稳定性是一个非常关键的概念,它主要涉及系统对外界扰动或内部变动的响应行为。以下是与系统稳定性相关的一些核心名词及其解释: 基本概念 稳定性(Stability) 系统稳定性是指当系统受…

Autosar工具链配置 CanNM

CAN网络管理filter 网管报文范围0x600~0x6FF repeat message time 超时时间 接收到主动唤醒源,网管报文快发周期,次数;正常周期发送时间 网管报文btye设置:1、重复消息请求位设置 2、ECU地址 wait bus-sleep 定时设置以及网管报…

蓝桥杯第十四届--子树的大小

题目描述 给定一棵包含 n 个结点的完全 m 叉树,结点按从根到叶、从左到右的顺序依次编号。 例如下图是一个拥有 11 个结点的完全 3 叉树。 你需要求出第 k 个结点对应的子树拥有的结点数量。 输入格式 输入包含多组询问。 输入的第一行包含一个整数 T &#xf…

telnet远程管理设备

实验目的:通过本机管理远端设备,模拟本地网卡和远端设备可以通信,配置telnet账户,远程管理设备,不用进入机房方式 拓扑图 云朵模拟本机的网卡,配置ar1的g0/0/0口IP后,确保在同一网络&#xff0…

【正点原子探索者STM32F4】TFTLCD实验学习记录

【正点原子探索者STM32】LCD实验学习记录 硬件硬件连接软件设计变量类型定义LCD参数结构体LCD地址结构体 函数定义读写命令和数据简介6个基本函数坐标设置函数画点函数读点函数字符显示函数LCD初始化 小结参考 硬件 STM32F407、4.3寸LCD屏 硬件连接 LCD_BL(背光控制)对应 PB1…

传输层 --- TCP (上篇)

目录 1. TCP 1.1. TCP协议段格式 1.2. TCP的两个问题 1.3. 如何理解可靠性 1.4. 理解确认应答机制 2. TCP 报头中字段的分析 2.1. 序号和确认序号 2.1.1. 序号和确认序号的初步认识 2.1.2. 如何正确理解序号和确认序号 2.2. TCP是如何做到全双工的 2.3. 16位窗口大小…

Redis Desktop Manager可视化工具

可视化工具 Redis https://www.alipan.com/s/uHSbg14XmsL 提取码: 38cl 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。 官网下载(不推荐):http…

【智能优化算法】IHAOAVOA(一种改进的混合天鹰优化算法(AO)和非洲秃鹫优化算法(AVOA))

发表在Mathematical Biosciences and Engineering的文章:IHAOAVOA: An improved hybrid aquila optimizer and African vultures optimization algorithm for global optimization problems.https://www.x-mol.com/paperRedirect/1572654041256222720 01.引言 天鹰…

Linux 安装系统可视化监控工具 Netdata

目录 About 监控工具 NetdataLinux 系统安装 Netdata关于 openEuler1、查看内核信息2、查看主机信息3、查看 dnf 包管理器的版本 Netdata 安装1、更新系统环境相关 rpm 包2、查看 netdata 包信息3、安装 netdata 包4、编辑 netdata.conf 配置5、启动 netdata 服务6、查看 netda…