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

位运算(10题)

目录一、基础知识1.基础位运算2.给一个数n确定它的二进制表示中的第x位是0还是13.将一个数n的二进制表示的第x位修改成14.将一个数n的二进制表示的第n位修改成05.位图的思想6.提取一个数n二进制表示中最右侧的17.将一个数n二进制表示中最右侧的1抹去8.位运算的优先级9.异或 ^,运算的运算律二、基础题目示例1.位1的个数2.比特位计数3.汉明距离4.只出现一次的数字5.只出现一次的数字3三、题目演示1.判断字符是否唯一2.丢失的数字3.两整数之和4.只出现一次的数字25.消失的两个数字一、基础知识1.基础位运算 左移操作符 按位与 有0就是0右移操作符 | 按位或 有1就是1~按位取反 ^异或 相同为1相异为0 / 无进位相加例如 1 0 1 1 0 1 ^1 1 0 1 1 0结果为 0 1 1 0 1 1无进位相加就是1 0 011 0但是不会向高位进位2.给一个数n确定它的二进制表示中的第x位是0还是1我们规定从右往左的位数为第012345.....31位这样右移动的距离等于它的位数(n x) 1 - 0 ------ 01 ------ 13.将一个数n的二进制表示的第x位修改成1n n | (1 x)4.将一个数n的二进制表示的第n位修改成0n n (~(1 x))5.位图的思想每个比特位0或者1的数值表示一种状态6.提取一个数n二进制表示中最右侧的1lowbit n -n(取反加一即变为负)7.将一个数n二进制表示中最右侧的1抹去n n (n - 1)8.位运算的优先级能加括号就加括号9.异或 ^,运算的运算律1.a ^ a 02.a ^ 0 a3.a ^ b ^ c a ^ (b ^ c)二、基础题目示例1.位1的个数. - 力扣LeetCodeclass Solution { public: int hammingWeight(int i) { int ret 0; int n 32; while(n 0) { if((i 1) 1)ret; i i 1; n--; } return ret; } };将要判断的数每次按位与1若为1则此位为1然后再右移一位2.比特位计数. - 力扣LeetCodeclass Solution { public: int Add(int i) { int ret 0; int n 32; while(n 0) { if((i 1) 1)ret; i i 1; n--; } return ret; } vectorint countBits(int n) { vectorintret(n1,0); for(int i 0; i n;i) { ret[i] Add(i); } return ret; } };原理同上只是多了一个循环3.汉明距离. - 力扣LeetCodeclass Solution { public: int hammingDistance(int x, int y) { int n 32; int ret 0; while(n0) { if((x 1) ! (y 1))ret; x x 1; y y 1; n--; } return ret; } };分别用 1 来判断两个数最低位是0还是1对两个数进行比较然后分别不断右移这两个数4.只出现一次的数字. - 力扣LeetCode利用异或的性质即可class Solution { public: int singleNumber(vectorint nums) { int val 0; for(auto ch:nums) { val ^ ch; } return val; } };5.只出现一次的数字3. - 力扣LeetCodeclass Solution { public: vectorint singleNumber(vectorint nums) { long long n 0; for(auto ch: nums) { n ^ ch; } long long mask n (-n); mask (int)mask; vectorintret(2,0); for(auto ch: nums) { if((ch mask) mask)ret[0] ^ ch; else ret[1] ^ ch; } return ret; } };我们先将所有值异或这个过程会将相同的数都消去最后得到两个不同的数ab异或的结果。这个数为1的位置是两个数上值不同的位置。为了方便我们取出最右侧的1。ab两个数中一个数的该位置为1一个数为0.而待分开的数的该位置也一定为1或0.因此我们将全部数分为两组axx yy zz bmmnnoo这样即可分别取出单独的数三、题目演示1.判断字符是否唯一. - 力扣LeetCodeclass Solution { public: bool isUnique(string astr) { int size astr.size(); if(size26)return false; int bitmap 0; for(int i 0; i size; i) { int distance astr[i]-a; if(((bitmap distance) 1) 1)return false; else { bitmap bitmap | (1 distance); } } return true; } };这里我们不使用数据结构我们使用位图来储存信息达到减小空间复杂度的效果。每个比特位储存一个字符的存在情况‘a’的位置是右侧第一位我们记为0下标。首先我们记录字符串的长度来进行遍历操作如果字符串比26长那么必定有重复每次进入循环的时候我们查看这个字符对应位置是否为1如果是我们返回fasle如果不是我们将位图的此位改为1.2.丢失的数字. - 力扣LeetCodeclass Solution { public: int missingNumber(vectorint nums) { int size nums.size(); int ret 0; for(int i 0; i size; i) { ret ret ^(nums[i]); } for(int i 0; i size; i) { ret ret ^ i; } return ret; } };利用异或的性质例如我们选取0-5中的5个数字1 5 2 3 00 1 2 3 4 5我们用0分别遍历异或上下两组数字上下两组中相同的数字进过异或都变为0最后只剩下0-5中剩余的那个数字也即丢失的数字 0 ^ 这个数字仍然为这个数字3.两整数之和. - 力扣LeetCodeclass Solution { public: int getSum(int a, int b) { while(a b) { int tmp a; a a ^ b; b (tmp b) 1; } return a ^ b; } };我们首先要知道异或运算是一种无进位相加那我们如何做到有进位呢只需要把a按位与b即可这样我们可以知道哪些位置是要进位的然后再左移一位相当于进位操作。但是进位之后相加还可能再次进位因此我们循环这个过程我们不断用a^b,ab更新a和b的值直到ab为0。此时无进位。因为任意数异或0等于它本身因此我们循环结束统一返回a^b即可4.只出现一次的数字2. - 力扣LeetCodeclass Solution { public: int singleNumber(vectorint nums) { int size nums.size(); int ret 0; for(int i 0; i 32; i) { int sum 0; for(auto ch:nums) { sum (ch i)1; } sum sum % 3; if(sum)ret ret | (sum i); } return ret; } };原理如上可以推广任意重复n次就对n取余5.消失的两个数字. - 力扣LeetCodeclass Solution { public: vectorint missingTwo(vectorint nums) { int size nums.size()2; int n 0; for(int i 1; i size; i) { n ^ i; } for(auto ch:nums) { n ^ ch; } long long mask n (-n); vectorintret(2); for(int i 1; i size; i) { if((i mask) mask)ret[0] ^ i; else ret[1] ^ i; } for(auto ch:nums) { if((ch mask) mask)ret[0] ^ ch; else ret[1] ^ ch; } return ret; } };与基础题目示例中的5.只出现一次的数字3相似只是遍历范围是一个数组加上一串连续的数字

相关文章:

位运算(10题)

目录 一、基础知识 1.基础位运算 2.给一个数n,确定它的二进制表示中的第x位是0还是1 3.将一个数n的二进制表示的第x位修改成1 4.将一个数n的二进制表示的第n位修改成0 5.位图的思想 6.提取一个数n,二进制表示中最右侧的1 7.将一个数n二进制表示中…...

VSCode工业调试配置文件.yaml泄露导致产线停机?紧急发布《工业级settings.json安全加固白皮书》(含SCADA系统隔离策略模板)

更多请点击: https://intelliparadigm.com 第一章:VSCode工业适配调试的安全危机构型全景 在工业控制系统(ICS)、边缘网关与嵌入式设备的远程协同调试场景中,VSCode 通过 Remote-SSH、Dev Containers 及自定义 Debug …...

从《网络空间独立宣言》到Web3:John Barlow的愿景在区块链时代实现了吗?

数字边疆的进化:从早期互联网理想主义到Web3的技术实践 1996年,当John Barlow写下《网络空间独立宣言》时,他或许想象不到二十多年后,区块链技术会以另一种方式重新诠释他的理念。这位电子前沿基金会的联合创始人曾宣称&#xff1…...

LangGraph核心类型深度解析:Command(Generic[N], ToolOutputMixin)

在LangGraph与Deep Agents生态中,Command(Generic[N], ToolOutputMixin)是连接节点逻辑与图状态管理的关键桥梁,它赋予开发者在节点执行过程中同时实现状态更新与控制流路由的能力,是构建复杂智能体工作流的基础构建块。本文将从基础功能、设…...

如何用WinDirStat快速分析磁盘空间?免费Windows磁盘管理工具终极指南

如何用WinDirStat快速分析磁盘空间?免费Windows磁盘管理工具终极指南 【免费下载链接】windirstat WinDirStat is a disk usage statistics viewer and cleanup tool for Microsoft Windows 项目地址: https://gitcode.com/gh_mirrors/wi/windirstat 你是否经…...

为什么选择QFT:重新定义点对点文件传输的架构范式

为什么选择QFT:重新定义点对点文件传输的架构范式 【免费下载链接】qft Quick Peer-To-Peer UDP file transfer 项目地址: https://gitcode.com/gh_mirrors/qf/qft 在分布式系统架构中,点对点文件传输一直是技术实现的核心挑战。传统方案要么依赖…...

Onekey终极指南:5分钟搞定Steam清单下载的完整教程

Onekey终极指南:5分钟搞定Steam清单下载的完整教程 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为复杂的Steam Depot清单下载而烦恼吗?Onekey就是你的救星&#x…...

面试官问堆排序,除了O(nlogn)你还能聊什么?从应用场景到代码优化

面试官问堆排序,除了O(nlogn)你还能聊什么?从应用场景到代码优化 当面试官抛出堆排序的问题时,大多数候选人会条件反射般回答"时间复杂度O(nlogn)"——这当然没错,但如果你止步于此,就错过了一次展示技术深度…...

SysReptor高级定制技巧:从字体配置到布局优化的完整教程

SysReptor高级定制技巧:从字体配置到布局优化的完整教程 【免费下载链接】sysreptor A customizable and powerful penetration testing reporting platform for offensive security professionals. Simplify, customize, and automate your pentest reports with e…...

rmlint输出格式大全:JSON、CSV、Shell脚本的灵活应用

rmlint输出格式大全:JSON、CSV、Shell脚本的灵活应用 【免费下载链接】rmlint Extremely fast tool to remove duplicates and other lint from your filesystem 项目地址: https://gitcode.com/gh_mirrors/rm/rmlint rmlint是一款超快速的文件系统重复文件清…...

Maya glTF插件架构重构:实现3D资产跨平台交付性能提升300%与成本降低80%

Maya glTF插件架构重构:实现3D资产跨平台交付性能提升300%与成本降低80% 【免费下载链接】maya-glTF glTF 2.0 exporter for Autodesk Maya 项目地址: https://gitcode.com/gh_mirrors/ma/maya-glTF 在游戏开发、虚拟现实和Web3D应用快速发展的今天&#xff…...

XUnity.AutoTranslator终极指南:3步实现Unity游戏AI实时翻译

XUnity.AutoTranslator终极指南:3步实现Unity游戏AI实时翻译 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语Unity游戏的语言障碍而烦恼吗?XUnity.AutoTranslator是一款…...

Index-AniSora未来展望:从当前版本到下一代动漫视频生成技术

Index-AniSora未来展望:从当前版本到下一代动漫视频生成技术 【免费下载链接】Index-anisora 项目地址: https://gitcode.com/gh_mirrors/in/Index-anisora Index-AniSora作为开源动漫视频生成技术的领先项目,正在通过持续迭代推动AI创作领域的边…...

告别外挂交换机!手把手教你用KSZ9897芯片在嵌入式板卡上集成7口千兆交换

告别外挂交换机!KSZ9897芯片在嵌入式板卡上的7口千兆交换集成实战 在工业自动化、智能驾驶和机器视觉领域,多传感器数据并行传输已成为刚需。传统方案采用主控板外置交换机的架构,不仅占用宝贵机箱空间,线缆缠绕更成为EMI隐患。Mi…...

用PSIM搞定毕业设计:一个12V转36V的直流升压电路仿真全流程(附参数计算与避坑点)

用PSIM搞定毕业设计:一个12V转36V的直流升压电路仿真全流程(附参数计算与避坑点) 在电子工程专业的毕业设计中,直流升压电路仿真是常见的实践课题。面对从12V升至36V的设计需求,许多同学常陷入参数计算错误、仿真设置不…...

TorrServer性能基准测试:不同硬件环境下的表现对比

TorrServer性能基准测试:不同硬件环境下的表现对比 【免费下载链接】TorrServer Torrent stream server 项目地址: https://gitcode.com/gh_mirrors/to/TorrServer TorrServer作为一款强大的Torrent stream server,其性能表现直接影响用户的流媒体…...

智能解决方案:stltostp实现高效STL到STEP格式转换

智能解决方案:stltostp实现高效STL到STEP格式转换 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在制造业数字化转型和CAD/CAM协同设计领域,工程师们面临一个关键技术挑…...

Onekey终极指南:如何一键自动化获取Steam Depot清单文件

Onekey终极指南:如何一键自动化获取Steam Depot清单文件 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Steam游戏开发者和MOD创作者们,你是否厌倦了手动获取Depot清单的…...

别再手动填Excel了!用EasyExcel的模板填充功能,5分钟搞定Java报表导出

告别低效报表开发:EasyExcel模板填充实战指南 每次月底导出报表时,看着同事在Excel里手动调整格式、复制粘贴数据,作为Java开发者的你是否感到一丝无奈?传统POI操作虽然强大,但面对复杂报表时,代码量往往比…...

三步完成Windows和Office永久激活:KMS_VL_ALL_AIO终极指南

三步完成Windows和Office永久激活:KMS_VL_ALL_AIO终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否厌倦了Windows和Office的激活弹窗?是否希望找到一种稳定…...

[stm32] 2-2 LED编程

文章目录前言2-2 LED编程模板工程的结构GPIO的标准库编程接口GPIO的初始化(CR)void GPIO_Init(GPIO_TypeDef\* GPIOx, GPIO_InitTypeDef\* GPIO_InitStruct);GPIO读输入(IDR)uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef\* GPIOx,…...

三步打造你的专属游戏云:Sunshine串流服务器实战手册

三步打造你的专属游戏云:Sunshine串流服务器实战手册 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏吗?Sunshine为你打开了一扇…...

ESP8266玩转网络引导:搭建一个‘钓鱼Wi-Fi’式演示服务器(用于产品原型展示)

ESP8266打造无感化产品演示系统:从技术实现到商业场景落地 想象一下这样的场景:在熙熙攘攘的展会上,潜在客户只需用手机连接一个名为"Demo_Product"的Wi-Fi热点,打开浏览器输入"demo.product"——无需记忆IP地…...

实战指南:使用WechatDecrypt工具快速解密微信聊天记录数据库

实战指南:使用WechatDecrypt工具快速解密微信聊天记录数据库 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 微信聊天记录作为个人数字资产的重要组成部分,常常因为加密存储而难以…...

告别终端焦虑:用Screen在服务器上跑深度学习,关掉XShell程序照样跑

告别终端焦虑:用Screen在服务器上稳定运行深度学习任务 每次在远程服务器上启动深度学习训练任务时,最担心的莫过于网络波动或不小心关闭终端导致数小时的计算成果付之东流。这种"终端焦虑"困扰着许多研究人员和工程师。本文将深入探讨如何利…...

UDS诊断实战:手把手教你用CANoe发送0x23服务读取ECU内存(附报文解析)

UDS诊断实战:用CANoe实现0x23服务内存读取全流程解析 当ECU开发进入调试阶段,工程师常需要直接读取特定内存地址的数据来验证算法执行结果或排查异常。UDS协议中的0x23服务(ReadMemoryByAddress)正是为此设计的利器。本文将带您使…...

Webviz性能优化:5个关键技巧提升渲染速度300%

Webviz性能优化:5个关键技巧提升渲染速度300% 【免费下载链接】webviz web-based visualization libraries 项目地址: https://gitcode.com/gh_mirrors/we/webviz Webviz作为一款强大的web-based visualization库,在处理大规模3D场景和实时数据可…...

3个秘密武器:为什么顶级玩家都在用DLSS Swapper提升游戏体验?

3个秘密武器:为什么顶级玩家都在用DLSS Swapper提升游戏体验? 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否曾经在游戏中被模糊的画面困扰?明明拥有强大的RTX显卡&#xff0…...

从零实现Transformer多头注意力机制的实战指南

1. 从零实现多头注意力机制的背景与价值多头注意力机制(Multi-Head Attention)作为Transformer架构的核心组件,已经彻底改变了自然语言处理领域的游戏规则。2017年那篇著名的《Attention Is All You Need》论文提出这一机制时,很多…...

索尼相机完全解锁终极指南:OpenMemories-Tweak让你的设备发挥100%潜能

索尼相机完全解锁终极指南:OpenMemories-Tweak让你的设备发挥100%潜能 【免费下载链接】OpenMemories-Tweak Unlock your Sony cameras settings 项目地址: https://gitcode.com/gh_mirrors/op/OpenMemories-Tweak 你是否曾为索尼相机的30分钟录像限制而烦恼…...