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

算法通关村——位运算之位移的妙用

位移的妙用

1、位1的个数

1.1、题目描述

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

示例1:

输入:00000000000000000000000000001011

输出:3

示例2:

输入:00000000000000000100000000000000

输出:1

1.2、问题分析与解答

​ 首先我们可以根据题目要求直接计算,题目给定的n是32位二进制表示下的一个整数,计算位1的个数的最简单的方法就是遍历n的二进制表示的每一位,判断每一位是否为1,同时进行计数。

​ 那么怎么判断某一位是否为1呢?例如:00001001001000100001100010001001,首先我们注意要识别到最低位的1,可以这么做:

00001001001000100001100010001001& 00000000000000000000000000000001= 00000000000000000000000000000001

​ 也就是说将原始数字和1进行与运算就能知道最低位是不是为1了,那其他位置该怎么算呢?

​ 第一种思路是让原始数据不断右移或者是让1不断左移。例如将原始数据右移1位:

00000100100100010000110001000100& 00000000000000000000000000000001= 00000000000000000000000000000000

​ 很显然此时可以判断出第二位是0,然后依次将原始数据右移就能判断出每个位置是否为1了。因此是不是1,计算一下(n >> i) & 1就可以了,代码如下:

public int hammingWeight(int n) {int count = 0;for (int i = 0; i < 32; i++) {count += (n >> i) & 1;}return count;
}

​ 除了上述方法外,还有一种方法:

​ 按位与运算有一个性质:对于整数n,计算n & (n - 1)的结果为将n的二进制表示的最后一个1变为0。

​ 利用这条性质,令n = n & (n - 1),则n的二进制表示中的1的数量减少一个。重复该操作,知道n的二进制表示中的全部数位变为0,则操作次数即为n的位1的个数,还是看上面的例子:

n:       00000100100100010000110001000100
n-1:     00000100100100010000110001000011
n&(n-1): 00000100100100010000110001000000

​ 可以看到此时n&(n-1)的结果比上一个n少了一个1,如果一直循环执行的话,到最后n等于0时退出循环,这时循环的次数就是原来n中1的个数,代码如下:

public int hammingWeight(int n) {int count = 0;while (n != 0) {n = n & (n - 1);count++;}return count;
}

2、比特位计数

2.1、问题描述

​ LeetCode338. 给你一个整数n,对于 0 <= i <= n 中的每一个i,计算其二进制表示中1的个数,返回一个长度为n + 1的数组ans作为答案。

示例:

输入:n=2

输出:[0, 1, 1]

解释:0到n有0,1,2三个数字,每个数字含有1的个数分别为0 1 1个,如下:

0 --> 0

1 --> 1

2 --> 10

2.2、问题分析与解答

​ 本题是上题的扩展,可以直接遍历0到n的每个数,在遍历的过程中对每个数计算其位1的个数。

​ 代码如下:

public int[] countBits(int n) {int[] bits = new int[n + 1];for (int i = 0; i <= n; i++) {bits[i] = countOnes(i);}return bits;
}public int countOnes(int x) {int ones = 0;while (x > 0) {x = x & (x - 1);ones++;}return ones;
}

相关文章:

算法通关村——位运算之位移的妙用

位移的妙用 1、位1的个数 1.1、题目描述 ​ LeetCode191. 编写一个函数&#xff0c;输入是一个无符号整数(以二进制串的形式)&#xff0c;返回其二进制表达式中数字位为 ‘1’ 的个数。 示例1&#xff1a; 输入&#xff1a;00000000000000000000000000001011 输出&#xff1…...

【开题报告】基于uni-app的高校新生报道APP的设计与实现

1.选题背景和意义 随着高校规模的不断扩大和信息化技术的迅速发展&#xff0c;传统的高校新生报道方式已经无法满足日益增长的新生数量和信息处理的需求。传统的线下报道流程通常存在着信息收集效率低、报到流程繁琐等问题&#xff0c;给学生、教职工和管理人员带来了许多不便…...

Elasticsearch docker-compose 使用 Logstash 从 JSON 文件中预加载数据

在我们创建 Elasticsearch 进行开发时&#xff0c;最简单的办法就是在本地使用 docker-compose 来一键部署一个 Elasticsearch 集群。有时&#xff0c;特别是在准备测试环境时&#xff0c;开发人员希望从一开始就创建包含一些测试数据的数据库容器。我们可以使用 Logstash 来很…...

<文件操作及常用的API>

文章目录 专栏导读&#x1f680;简单认识一下文件&#x1f680;树形结构和目录&#x1f680;文件路径-相对路径、绝对路径&#x1f680;文件类型&#x1f680;Java中文件的操作&#x1f680;File 类的常用方法 专栏导读 &#x1f680;多线程章节 &#x1f490;数据结构剖析 &am…...

深入探讨Linux中的文本文件查看命令

目录 前言1 cat命令2 less命令3 more命令4 head命令5 tail命令6 总结 前言 在Linux系统中&#xff0c;文本文件是日常工作中不可或缺的一部分&#xff0c;无论是配置文件、日志文件还是代码文件&#xff0c;都需要用到文本文件查看命令。在本文中&#xff0c;我们将深入研究一…...

asp.net企业员工档案信息管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目

一、源码特点 asp.net企业员工档案信息管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 asp.net企业员工档案信息管理系统 二、功能介绍 本系统使用Microsoft Visual Studio 2019为开发工具&…...

WPF中的xmlns 和xmlns:x有什么区别?

WPF (Windows Presentation Foundation) 中的 xmlns 和 xmlns:x 是XML命名空间的声明&#xff0c;它们在XAML&#xff08;eXtensible Application Markup Language&#xff09;中被广泛使用。XAML是WPF、Silverlight、Xamarin.Forms等技术中用于定义UI元素的标记语言。 xmlns: …...

为什么流量卡禁区多,而手机卡却可以用呢?

很多朋友比较关心流量卡禁区的问题&#xff0c;当我们申请流量卡时&#xff0c;运营商都会在套餐详情中标明具体的禁发地区&#xff0c;这个时候很多朋友都会有疑问了&#xff0c;为什么流量卡不能用的地区&#xff0c;可以申请到手机卡呢。 ​  想要清楚这个问题&#xff0…...

Linux 桌面应用

Part I: Linux 系统概述 什么是 LinuxLinux 的历史和版本Linux 发行版介绍Linux 的优缺点 Part II: Linux 安装与配置 5. 硬件要求与准备工作 6. 安装 Linux 操作系统 7. Linux 系统初始化设置 8. Linux 系统更新与升级 9. Linux 基础配置 Part III: Linux 命令行 10. Linux…...

NLP领域的突破催生大模型范式的形成与发展

当前的大模型领域的发展&#xff0c;只是范式转变的开始&#xff0c;基础大模型才刚刚开始改变人工智能系统在世界上的构建和部署方式。 1、大模型范式 1.1 传统思路&#xff08;2019年以前&#xff09; NLP领域历来专注于为具有挑战性的语言任务定义和设计系统&#xff0c…...

大模型的全面回顾,看透大模型 | A Comprehensive Overview of Large Language Models

大模型的全面回顾&#xff1a;A Comprehensive Overview of Large Language Models 返回论文和资料目录 论文地址 1.导读 相比今年4月的中国人民大学发表的大模型综述&#xff0c;这篇综述角度更侧重于大模型的实现&#xff0c;更加硬核&#xff0c;更适合深入了解大模型的一…...

【瑞禧分享】碳化硅纳米线 SiC纳米线 <100nm SiC晶须 SiC短纤维

碳化硅纳米线 规格或纯度&#xff1a;线/晶须含量&#xff1a;99% 供应商&#xff1a;西安瑞禧生物 英文名称&#xff1a;SiC Nanowire 别名&#xff1a;碳化硅纳米线,SiC晶须,SiC短纤维,SiC纳米线 英文别名&#xff1a;SiC Nanowire,SiC whiskers,SiC fiber 介绍&#x…...

P3371 【模板】单源最短路径(弱化版)

【模板】单源最短路径&#xff08;弱化版&#xff09; 题目背景 本题测试数据为随机数据&#xff0c;在考试中可能会出现构造数据让SPFA不通过&#xff0c;如有需要请移步 P4779。 题目描述 如题&#xff0c;给出一个有向图&#xff0c;请输出从某一点出发到所有点的最短路…...

一文入门Springboot+actuator+Prometheus+Grafana

环境介绍 技术栈 springbootmybatis-plusmysqloracleactuatorPrometheusGrafana 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 本地主机应用 192.168.1.9:8007 PrometheusGrafana安装在同一台主机 http://…...

基于Qt 多线程(继承 QObject 的线程)

​ 继承 QThread 类是创建线程的一种方法,另一种就是继承QObject 类。继承 QObject 类更加灵活。它通过 QObject::moveToThread()方法,将一个 QObeject的类转移到一个线程里执行。恩,不理解的话,我们下面也画个图捋一下。 通过上面的图不难理解,首先我们写一个类继承 QObj…...

图论11-欧拉回路与欧拉路径+Hierholzer算法实现

文章目录 1 欧拉回路的概念2 欧拉回路的算法实现3 Hierholzer算法详解4 Hierholzer算法实现4.1 修改Graph&#xff0c;增加API4.2 Graph.java4.3 联通分量类4.4 欧拉回路类 1 欧拉回路的概念 2 欧拉回路的算法实现 private boolean hasEulerLoop(){CC cc new CC(G);if(cc.cou…...

(一)什么是Vite——vite介绍与使用

什么是Vite Vite&#xff08;法语意为 "快速的"&#xff0c;发音 /vit/&#xff0c;发音同 "veet"&#xff09;是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验。 它主要由两部分组成&#xff1a; 一个开发服务器&#xff0c;它基于 原生 …...

直流电动机四象限运行控制变流器设计

摘 要 节能和效率是工业经济发展的主题&#xff0c;电机在各行各业都是主要的动力来源&#xff0c; 直流电机以其控制简单&#xff0c;效率高&#xff0c;功率密度大等优势脱颖而出。基于直流电动机四象限运行控制变流器应用广泛&#xff0c;比如电子设备、电机控制、工业等行…...

虹科示波器 | 汽车免拆检修 | 2021款广汽丰田威兰达PHEV车发动机故障灯异常点亮

一、故障现象 一辆2021款广汽丰田威兰达PHEV车&#xff0c;搭载A25D-FXS发动机和动力蓄电池系统&#xff08;额定电压为355.2V&#xff0c;额定容量为45.0Ah&#xff09;&#xff0c;累计行驶里程约为1万km。车主反映&#xff0c;高速行驶时发动机突然抖动&#xff0c;且发动机…...

机器学习和深度学习领域的算法和模型

机器学习和深度学习领域有许多算法和模型&#xff0c;以下是一些常见的算法和模型&#xff1a; 线性回归&#xff08;Linear Regression&#xff09;逻辑回归&#xff08;Logistic Regression&#xff09;决策树&#xff08;Decision Tree&#xff09;随机森林&#xff08;Ran…...

SmallThinker-3B开源镜像实操:边缘部署+草稿加速双场景落地指南

SmallThinker-3B开源镜像实操&#xff1a;边缘部署草稿加速双场景落地指南 1. 引言&#xff1a;为什么你需要关注SmallThinker-3B&#xff1f; 如果你正在寻找一个既能在边缘设备上流畅运行&#xff0c;又能作为大模型“加速器”的AI工具&#xff0c;那么SmallThinker-3B-Pre…...

WebDataset数据增强库:集成Albumentations与自定义变换的终极指南

WebDataset数据增强库&#xff1a;集成Albumentations与自定义变换的终极指南 【免费下载链接】webdataset A high-performance Python-based I/O system for large (and small) deep learning problems, with strong support for PyTorch. 项目地址: https://gitcode.com/gh…...

Pexpect异常处理完全手册:EOF、TIMEOUT等错误的解决之道

Pexpect异常处理完全手册&#xff1a;EOF、TIMEOUT等错误的解决之道 【免费下载链接】pexpect A Python module for controlling interactive programs in a pseudo-terminal 项目地址: https://gitcode.com/gh_mirrors/pe/pexpect Pexpect是一个功能强大的Python模块&a…...

C++编程中new与delete操作符的深度解析

C编程中new与delete操作符的深度解析 在C编程的广阔天地里&#xff0c;内存管理是一个既基础又至关重要的环节。对于每一位C开发者而言&#xff0c;掌握内存的动态分配与释放是构建高效、稳定应用程序的基石。在众多内存管理工具中&#xff0c;new与delete操作符无疑是最为核心…...

B0505S-2WR3 适配优选 DB2-05S05LS,DC-DC 电源模块参数与场景深度解析

在工业控制、仪器仪表、通信接口等标准化电路设计中&#xff0c;2W 级 5V 转 5V 隔离 DC-DC 模块是高频应用的核心器件。DB2-05S05LS 和 B0505S-2WR3 作为该功率段的主流型号&#xff0c;在电气规格、物理规格与场景适配性上呈现高度契合&#xff0c;为硬件工程师的标准化选型提…...

# 系列文10:突破Activiti限制!政务工作流任意流转,支持跳退

系列文10&#xff1a;突破Activiti限制&#xff01;政务工作流任意流转&#xff0c;支持跳退回退 非科班野生程序员&#xff0c;深耕政务信息化20年&#xff0c;这套自研Java Web框架支撑过省级新农保、全国首例跨省医保结算等核心民生系统&#xff0c;18年稳定运行至今。本系…...

AWS推出新工具简化量子纠错开发流程

谷歌近日将量子计算机实用化时间表提前至2029年&#xff0c;这得益于量子计算机硬件、量子纠错和算法方面的重大改进。2019年&#xff0c;谷歌估计需要2000万个量子比特才能破解RSA加密。到2025年5月&#xff0c;谷歌将这一估计数字下调至100万个。今年2月&#xff0c;澳大利亚…...

4大技术方案解决WarcraftHelper工具的《魔兽争霸III》兼容性与性能优化问题

4大技术方案解决WarcraftHelper工具的《魔兽争霸III》兼容性与性能优化问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专注…...

L293D电机驱动库:嵌入式直流电机控制实战指南

1. L293D电机驱动库深度解析&#xff1a;面向嵌入式工程师的工程实践指南L293D是TI&#xff08;德州仪器&#xff09;推出的双H桥直流电机驱动芯片&#xff0c;广泛应用于Arduino、ESP32等微控制器平台的中小功率直流电机控制场景。本库并非简单封装GPIO操作&#xff0c;而是针…...

基于单片机的室内环境监测控制系统的设计与实现

一、系统介绍 本论文针对室内环境监测和控制的需求&#xff0c;设计并实现了一套基于单片机的智能环境监测控制系统。系统包括硬件设计和软件设计两个主要部分。在硬件设计方面&#xff0c;系统涵盖了单片机最小系统、OLED显示屏、按键电路模块、DHT11模块、ESP8266-01s模块和继…...