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

位运算相关题目:下一个数、整数转换、配对交换

题目1:下一个数

给定一个正整数,找出与其二进制表达式中1的个数相同且大小最接近的那两个数(一个略大,一个略小)。

示例:

 输入:num = 2(或者0b10)
 输出:[4, 1] 或者([0b100, 0b1])
 输入:num = 1
 输出:[2, -1]

解题思路:

1.先用bitset将num的32位二进制表示出来,存放到数组中,方便可以遍历

2.较大值:从左往右找到第一个01,将其转换成10,再将右侧剩余的1全都移动到最低位

eg.0101110   ->1000111

3.较小值:从左往右找到第一个10,将其转换成01, 再将右侧剩余的1全都移动到最高位

eg.1001110   ->0111100

4.bitset数组的下标是从低位开始的,也就是从右往左进行遍历

源代码如下:

class Solution {
public:vector<int> findClosedNumbers(int num) {bitset<32> smaller(num);//将二进制表示出来bitset<32> bigger(num);//找较小值int a=-1;//a初始化为-1for(int i=1;i<32;i++){//找到10,变成01if(smaller[i]==1 && smaller[i-1]==0){smaller.flip(i);//flip(i)将第i位上的数字进行翻转 (0转1,1转0)smaller.flip(i-1);//将右侧剩余的1,全移动到高位//相当于left和right的位互换for(int left=0,right=i-2;left<right;){//从低位找到第一个不为0的while(left<right && smaller[left]==0) left++;//从高位找到第一个不为1的while(left<right && smaller[right]==1) right--;//位翻转smaller.flip(left);smaller.flip(right);}//smaller.to_ulong()   将数组smaller转成unsigned long类型的值//再强转成int类型a=(int)smaller.to_ulong();break;}}//找较大值int b=-1;//在找较大值时,bigger要保证正数,最高符号位保证为0,最大正数为2147483647,2进制31个1,i只能到第30位,如果写 i<32 会出现上溢,所以这里与较小值不同的点在于要将i<32改为i<31,防止溢出for(int i=1;i<31;i++){//找到01,变成10if(bigger[i]==0 && bigger[i-1]==1){bigger.flip(i);bigger.flip(i-1);//将右侧剩余的1全移动到低位for(int left=0,right=i-2;left<right;){while(left<right && bigger[left]==1) left++;while(left<right && bigger[right]==0) right--;bigger.flip(left);bigger.flip(right);}b=(int)bigger.to_ulong();break;}}return {b,a};}
};

题目2:整数转换

编写一个函数,确定需要改变几个位才能将整数A转成整数B。

示例:

 输入:A = 29 (或者0b11101), B = 15(或者0b01111)
 输出:2
 输入:A = 1,B = 2
 输出:2

 解题思路:

1.用bitset将整数A和B的32位 二进制表示出来存放在数组里,进行遍历

2.遇到aa[i]!=bb[i],说明需要转换,count++即可

源代码如下:

class Solution {
public:int convertInteger(int A, int B) {bitset<32> aa(A);//A的二进制bitset<32> bb(B);//B的二进制int i=0;//都是32位,所以只需要一个下标进行遍历int count=0;//用来记录需要改变的次数while(i<32){//遇到当前位不相等的,就需要转换,count++if(aa[i]!=bb[i]){count++;}i++;}//返回countreturn count;}
};

题目3:配对交换

编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。

示例:

 输入:num = 2(或者0b10)
 输出 1 (或者 0b01)

解题思路:

1.用bitset将num的二进制保存到数组中,便于用下标进行访问

2.从低到高两两进行交换,i+=2

3.将最后的结果用to_ulong()函数先转成unsigned long类型,再强转成int类型

源代码如下:

class Solution {
public:int exchangeBits(int num) {bitset<32> bit(num);int i=0;//从低到高进行两两交换//注意:因为要访问i+1,所以循环结束条件为i<31,防止越界while(i<31){int temp=bit[i];bit[i]=bit[i+1];bit[i+1]=temp;i+=2;//i每次跳两个位数}//bit.to_ulong()  将二进制数转成unsigned long类型的值//再强转成int类型,就可以返回了return (int)bit.to_ulong();}
};

相关文章:

位运算相关题目:下一个数、整数转换、配对交换

题目1&#xff1a;下一个数 给定一个正整数&#xff0c;找出与其二进制表达式中1的个数相同且大小最接近的那两个数&#xff08;一个略大&#xff0c;一个略小&#xff09;。 示例&#xff1a; 输入&#xff1a;num 2&#xff08;或者0b10&#xff09; 输出&#xff1a;[4,…...

【数据结构】链表常见题目

文章目录 链表合并两个有序链表反转链表复制带随机指针的链表环形链表环形链表II相交链表移除链表元素链表中倒数第k个节点链表分割链表的回文结构链表的中间节点旋转链表链表排序链表求和 (逆序求)链表求和II (正序求)重排链表奇偶链表反转链表II <==> 链表内指定区间反…...

多家企业加入即将在2024年发射的量子卫星SpeQtral-1任务

近日&#xff0c;总部位于新加坡的量子通信技术公司SpeQtral宣布将与纳米航空电子公司NanoAvionics和卫星光子学公司Mbryonics合作执行即将到来的SpeQtral-1量子密钥分发&#xff08;Quantum Key Distribution, QKD&#xff09;卫星任务。NanoAvionics被选为卫星平台提供商&…...

shell脚本基础

目录 前言 一、概述 &#xff08;一&#xff09;、shell脚本基础概念 &#xff08;二&#xff09;、shell的类型 二、Shell变量 &#xff08;一&#xff09;、组成 1.变量名 2.变量值 &#xff08;二&#xff09;、类型 1.系统内置变量&#xff08;环境变量&#xff09; 2.自定…...

创建maven的Springboot项目出现错误:Cannot access alimaven

创建maven的Springboot项目出现错误&#xff1a;Cannot access alimaven 1&#xff09;问题2) 分析问题3&#xff09;解决问题 1&#xff09;问题 创建maven的Springboot项目出现错误&#xff1a; Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/p…...

神经网络基础-神经网络补充概念-32-神经网络与大脑

概念 神经网络&#xff08;Neural Networks&#xff09;是受到生物神经系统启发而设计的机器学习模型&#xff0c;用于处理和学习复杂的数据模式。尽管神经网络的设计和工作原理与大脑有一些相似之处&#xff0c;但它们并不完全相同&#xff0c;以下是神经网络和大脑之间的一些…...

linux自动填充密码及提示信息

背景&#xff1a;需要自动创建nvc的登录密码 sudo apt-get install expect expect 是由Don Libes基于Tcl&#xff08;Tool Command Language &#xff09;语言开发的&#xff0c;主要应用于自动化交互式操作的场景&#xff0c;借助Expect处理交互的命令&#xff0c;可以将交互…...

IC设计中主要的EDA工具有哪些? (内附EDA虚拟机安装资源)

EDA工具的使用涵盖了芯片的功能设计、综合、验证、物理设计等环节&#xff0c;更是被称作“芯片设计的工作母机”。下面就来为大家具体介绍一下常见的EDA工具。&#xff08;需要EDA虚拟机安装资源文末可领取~&#xff09; 什么是EDA&#xff1f; EDA是电子设计自动化&#xf…...

Zabbix配置通用的TCP/IP:port监控项

我们经常的用接口&#xff0c;比如说FTP、HTTP、DNS、数据库接口&#xff0c;都可以用IP:PORT方式探测其是否存活&#xff0c;那么我们去繁就简&#xff0c;就简单监控一下IP&#xff1a;PORT吧&#xff01; 1、新建主机&#xff1a; 填入主机名称、群组、Agent可以不填&…...

【RocketMQ】SpringBoot集成RocketMQ

SpringBoot集成RocketMQ 首先依旧是引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version> </dependency>然后就可以编写发送不同类…...

思腾云计算

思腾合力受邀参加第七届世界智能大会&#xff0c;届时在会上展出思腾合力 AI 服务器。诚挚邀请与会者来思腾展位&#xff08;S10-B04&#xff09;参观与交流&#xff0c;领取七彩虹电竞机械键盘与鼠标、正版NVIDIA信仰尺、公牛魔方智能USB插座、超大桌面鼠标垫等精美礼品。 由天…...

前端面试:【HTML】语义化标签、表单、媒体元素

HTML&#xff08;超文本标记语言&#xff09;是构建网页内容的基础&#xff0c;它通过一系列标签来描述页面的结构和内容。在这篇文章中&#xff0c;我们将探讨HTML的基础知识&#xff0c;包括语义化标签、表单和媒体元素。 语义化标签&#xff1a;赋予内容更多意义 语义化标签…...

2024浙大MBA/MEM/MPA四个月冲刺备考策略

近期收到很多考生的咨询&#xff1a;距离联考就仅剩四个多月的时间&#xff0c;这个管理类联考的难度如何&#xff1f;主要考些什么内容&#xff1f;现在才开始备考还有希望上岸浙大吗&#xff1f;是不是要等到明年在开始备考比较合适&#xff1f;那么今天在这里小立老师就跟大…...

Element通过v-for循环渲染的form表单校验

需求&#xff1a;有个表单信息是v-for渲染的&#xff0c;例如下图&#xff0c;通过循环遍历实现新增和删除模块&#xff0c;按照平时的写法实现校验&#xff0c;是不能实现我们想要的效果&#xff0c;根据这个需求&#xff0c;我找到了一个解决方法 1.HTML <el-form ref&qu…...

精彩回顾 | 迪捷软件出席2023ATC汽车电子与软件技术周

2023年8月18日&#xff0c;由ATC汽车技术会议主办&#xff0c;上海市集成电路行业协会支持的“2023ATC汽车电子与软件技术周”在上海市圆满落幕。迪捷软件上海参展之行圆满收官。 ▲开幕式 本次峰会汇聚了整车厂、汽车零部件集团、软硬件方案提供商、软件工具供应商、软件测试…...

树莓派的自启动与桌面应用程序

目录 1 打开终端自启动 .bashrc 2 触发时机较早的开机自启动rc.local 3 桌面应用程序 4 触发时机较晚的的开机自启动 autostart 1 打开终端自启动 .bashrc .bashrc的程序也可以在开机时进行自启动&#xff0c;但是每一次打开终端时同样会运行一遍&#xff0c;所以只需…...

RabbitMQ面试题

1. 什么是MQ MQ 就是消息队列。是软件和软件进行通信的中间件产品 2. MQ的优点 异步处理 - 相比于传统的串行、并行方式&#xff0c;提高了系统吞吐量。 应用解耦 - 系统间通过消息通信&#xff0c;不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量…...

Kubernetes二进制部署方案

目录 一、环境准备 2.1、主机配置 2.2、安装 Docker 2.3、生成通信加密证书 2.3.1、生成 CA 证书&#xff08;所有主机操作&#xff09; 2.3.2、生成 Server 证书&#xff08;所有主机&#xff09; 2.3.3、生成 admin 证书(所有主机) 2.3.4、生成 proxy 证书 三、部署 …...

Android 13 开启关闭飞行模式

一.背景 由于客户定制的Settings里面需要开启和关闭飞行模式,所以需要实现此功能。 二.前提条件 首先应用肯定要是系统应用,并且导入framework.jar包,具体可以参考: Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能_android 自动开启无障碍服务_龚礼鹏的博客…...

C++学习笔记总结练习:EffectiveSTL

文章目录 使用STL库的55条建议1.慎重选择容器的类型2.不要试图编写独立于容器的代码3.确定容器中的对象拷贝正确且高效4.调用empty判断是否为空&#xff0c;而不是size5.区间成员函数优于与之对应单元素成员函数6.如果容器中包含了通过new操作创建的指针&#xff0c;切记在容器…...

SQL Developer中的Data Redaction

SQL Developer中的Data Redaction用起来比命令行方便多了。可以选定表或视图&#xff0c;右键点击“遮盖保护”菜单。 但赋权方面有需要注意的地方。 假设Redact Admin是SYS&#xff0c;Redact User是HR。虽然SYS具备所有权限&#xff0c;但还是报以下错误。其实这个错误是针…...

深入解析Ed25519椭圆曲线数字签名算法的C#移植及应用示例

第一部分&#xff1a;Ed25519算法的简介与重要性 随着数字加密技术的飞速发展&#xff0c;我们不断地探索更安全、更高效的加密算法来保护数据和身份验证。其中&#xff0c;Ed25519已经成为了椭圆曲线数字签名算法&#xff08;ECDSA&#xff09;的一个重要分支&#xff0c;其在…...

XQuery创建BaseX数据库实例

XQuery创建BaseX数据库实例 文章目录 XQuery创建BaseX数据库实例1、准备工作2、demo目录结构3、IDEA配置BaseX4、工具类BaseXClient5、Example 1、准备工作 开发工具&#xff1a; IDEAOxygen 技术&#xff1a; JavaBaseXXpathXquery BaseX需要阅读的文档&#xff1a; htt…...

MySQL索引(Index)

Index 数据库中的索引&#xff08;Index&#xff09;是一种数据结构&#xff0c;用于提高数据库查询性能和加速数据检索过程。索引可以看作是数据库表中某个或多个列的数据结构&#xff0c;类似于书中的目录&#xff0c;可以帮助数据库管理系统更快地定位和访问数据。它们是数…...

web框架面试题

1、Django 的生命周期&#xff1f; 前端发起请求nginxuwsgi中间件URLview视图通过orm与model层进行数据交互拿到数据返回给view试图将数据渲染到模板中拿到字符串中间件uwsginginx前端渲染 2、中间件的五种方法&#xff1f; process_requestprocess_responseProcess_viewPro…...

什么是字体堆栈(font stack)?如何设置字体堆栈?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是字体堆栈&#xff08;Font Stack&#xff09;&#xff1f;⭐ 如何设置字体堆栈&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 …...

推特群推王:引爆您的产品

作为出海市场的营销平台&#xff0c;Twitter的流量不断攀升&#xff0c;已然成为跨境贸易企业的一部分。当前&#xff0c;Twitter已不再是一个简单的社交平台&#xff0c;而是一个强大的营销平台&#xff0c;使企业能够与受众实时互动。然而&#xff0c;与其他社交媒体一样&…...

[JavaWeb]【七】web后端开发-MYSQL

前言&#xff1a;MySQL是一种流行的关系型数据库管理系统,它的作用是存储和管理数据。在Web开发中,MySQL是必备的数据库技能之一,因为它可以帮助Web开发人员处理大量的数据,并且提供了强大的数据查询和管理功能。 一 数据库介绍 1.1 什么是数据库 1.2 数据库产品 二 MySQL概述…...

C语言:初阶测试错题(查漏补缺)

题一&#xff1a;字符串倒置 示例1 输入 I like beijing. 输出 beijing. like I 思路一&#xff1a; 定义字符串数组arr[ ] ,利用gets()将要倒置的字符串输入&#xff0c;记录字符串长度len&#xff0c;此时写一个逆置函数Inversion()&#xff0c;第一步将整个字符串逆置&…...

数组累加器-reduce、reduceRight

数组累加器-reduce 一、基本语法1.reduce2.reduceRight 二、具体使用1.reduce2.reduceRight 三、使用场景1.数组求和2.数组求积3.计算数组中每个元素出现的次数 一、基本语法 1.reduce reduce() &#xff1a;对数组中的每个元素按序执行一个提供的 reducer 函数&#xff0c;每…...