coding ability 展开第九幕(位运算——进阶篇)超详细!!!!

在这里插入图片描述

文章目录

  • 前言
  • 丢失的数字
  • 两整数之和
  • 只出现一次的数字II
  • 消失的两个数字
  • 总结

前言

上一篇博客,我们已经把位运算的基础知识,以及基本运算都掌握啦
上次的习题还是让人意犹未尽,今天我们来尝试一下难一点的题目
位运算熟练起来真的让人觉得做题是一种享受
fellow me

丢失的数字

丢失的数字
在这里插入图片描述
思路:
少了一个数字,给他找回来不就好了吗
让我想到直接对数组 按位异或 一遍, 然后再对 0-n 按位异或一遍,出现两次的都消消乐
剩下的就是我们要找的数字

class Solution 
{
public:int missingNumber(vector<int>& nums) {int ans = 0;for(auto x : nums){ans ^= x;   //  按位异或当前数组}for(int i = 0; i <= nums.size(); i++){ans ^= i;    //  重新按位异或一遍  0-n}return ans;}
};

两整数之和

两整数之和
在这里插入图片描述

思路:
乍一看,不让我用运算方法,那不是完蛋了吗
但仔细想想,这不是学了位运算,前面了解到按位异或(^)是无进制加法,按位与(&)是进位
其实可以组合起来使用,我们先算出无进位相加的结果,然后再找出进位,给他加上,再如此反复循环,直到没有进位

class Solution 
{
public:int getSum(int a, int b) {while(b != 0){int x = a ^ b;    //  无进位相加//  这里无符号  是防止溢出  unsigned int cur = (unsigned int) (a & b) << 1;  // 找出进位a = x;b = cur;}return a;}
};

就这么几行,想明白了,还是很简单的

只出现一次的数字II

只出现一次的数字II
在这里插入图片描述
思路:
一眼hash直接秒了,但是题目要求常数级空间。。。。。
设要找的数位 ret
由于整个数组中,需要找的元素只出现了「一次」,其余的数都出现的「三次」,因此我们可以根据所有数的「某一个比特位」的总和 %3 的结果,快速定位到 ret 的「一个比特位上」的值是0 还是 1
这样,我们通过 ret 的每一个比特位上的值,就可以将 ret 给还原出来

class Solution 
{
public:int singleNumber(vector<int>& nums) {int ret = 0;for(int i = 0; i < 32; i++){int sum = 0;for(auto x : nums){if(((x >> i) & 1) == 1)   //  判断当前比特位{sum++;    // 累积个数}}sum %= 3;if(sum == 1)   //  符合条件就把ret当前的比特位置为 1{ret = ret | 1 << i;}}return ret;}
};

做完发现位运算真好奇妙

消失的两个数字

消失的两个数字
在这里插入图片描述
最后一题hard难度结尾吧
思路:
缺了两个数字,想到前面热乎的缺一个数字,我们可以按位异或两遍给他找出来,但是找出来的是两个数字的异或
所以我们还要处理这两个数字的异或,分解他们,又想到我们上一次做过的(两个只出现一次的数字)
好像就是两个题目的融合,才让他到了hard的难度

class Solution 
{
public:vector<int> missingTwo(vector<int>& nums) {int ans = 0;for(auto x : nums)ans ^= x;for(int i = 1; i <= nums.size() + 2; i++)ans ^= i;//  现在找到了两个数字的异或int x = 0, y = 0;ans = ans & (-(long long)ans);  //  提起ans二进制最右侧的  1for(auto i : nums) //  分组异或 {   if((i & ans) == ans)x ^= i;elsey ^= i;}for(int i = 1; i <= nums.size() + 2; i++)//  分组异或{if((i & ans) == ans)x ^= i;elsey ^= i;}return {x, y};}
};

prefect 位运算完美收官

总结

今天通过几道位运算题目,巩固了位运算的应用技巧:

  1. 丢失的数字
    利用异或性质,两次异或数组和0~n的数,出现两次的抵消,剩下的即为缺失数。
  2. 两整数之和
    通过异或(无进位加法)和与运算左移(进位)模拟加法,循环处理进位直至为零,注意用unsigned避免溢出。
  3. 只出现一次的数字II
    统计每一位1的个数,模3后确定目标数各位的值,逐位组合得到结果。
  4. 消失的两个数字
    结合异或和分组思想,先找到两数异或结果,提取最右1进行分组,分别异或数组和完整序列得到两数。
    心得
    位运算题目需灵活运用位操作性质,如异或消重、与运算找进位、按位统计等
    通过分解问题、逐步处理,能将复杂问题简化,然后逐个击破

今天的内容就到这里啦,不要走开,小编持续更新中~~~~

在这里插入图片描述

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

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

相关文章

【数据结构篇】算法征途:穿越时间复杂度与空间复杂度的迷雾森林

文章目录 【数据结构篇】算法征途&#xff1a;穿越时间复杂度与空间复杂度的迷雾森林 一、 什么是算法1. 算法的定义1.1 算法的五个特征1.2 好算法的特质 2. 时间复杂度3. 空间复杂度 【数据结构篇】算法征途&#xff1a;穿越时间复杂度与空间复杂度的迷雾森林 &#x1f4ac;欢…

Logo语言的系统监控

Logo语言的系统监控 引言 在信息技术飞速发展的时代&#xff0c;系统监控成为了确保计算机系统和网络平稳运行的重要手段。系统监控不仅可以实时跟踪系统的性能、资源使用情况和安全风险等&#xff0c;还能够在出现问题时及时发出警报&#xff0c;从而避免潜在的故障和损失。…

STP学习

{所有内容均来自于西安欧鹏的陈俊老师} STP生成树 当二层交换机意外成环路的时候会发生&#xff1a; 1.广播风暴&#xff1a;当广播帧进入环路时&#xff0c;会被不断复制并传输&#xff0c;导致网络中的广播流量急剧增加&#xff0c;消耗大量的网络带宽&#xff0c;降低网络…

使用RKNN进行yolo11-cls部署

文章目录 概要制作数据集模型训练onnx导出rknn导出概要 YOLO(You Only Look Once)是一系列高效的目标检测算法,其核心思想是将目标检测任务转化为一个回归问题,通过单个神经网络直接在图像上预测边界框和类别概率。当将其用于分类任务时,会去除目标检测相关的边界框预测部…

【MySQL】01.MySQL环境安装

注意&#xff1a;在MYSQL的安装与卸载中&#xff0c;需要使用root用户进行。 一、卸载不必要的环境 • 查看是否有运行的服务 [rootVM-24-10-centos etc]# ps axj |grep mysql1 22030 22029 22029 ? -1 Sl 27 0:00 /usr/sbin/mysqld --daemonize --pid-fi…

程序化广告行业(59/89):广告验证与反作弊实战技巧

程序化广告行业&#xff08;59/89&#xff09;&#xff1a;广告验证与反作弊实战技巧 大家好&#xff01;在程序化广告领域&#xff0c;想要做好投放&#xff0c;除了了解基本的架构和原理&#xff0c;还得掌握一些关键的技能&#xff0c;比如广告验证和反作弊。今天就和大家一…

矢量瓦片切片工具

1.geoserver 可以生成geojson mvt(pbf) tojson 三种格式矢量瓦片 2.mapbox的tippecanoe 可以生成pbf矢量瓦片&#xff0c;文件夹形式和mbtiles两种 3.TileStache python工具&#xff0c;可以生成geojson瓦片 4.PostGis mapbox插件可以生成pbf瓦片&#xff0c;据说是动态切片…

Windows 系统 Git 2.15.0 (64位) 下载与安装教程

1. 下载 Git 2.15.0 (64位) 安装包 下载地址&#xff1a;https://pan.quark.cn/s/f817ab9285dc 2. 运行安装程序 双击下载的 Git-2.15.0-64-bit.exe。 如果系统提示安全警告&#xff0c;选择 “运行”&#xff08;确认来源可信&#xff09;。 3. 安装向导设置 按以下步骤配…

MCP服务器:AI与外部工具交互的桥梁——Python和代理AI工具集成指南

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…

AIGC8——大模型生态与开源协作:技术竞逐与普惠化浪潮

引言&#xff1a;大模型发展的分水岭时刻 2024年成为AI大模型发展的关键转折点&#xff1a;OpenAI的GPT-4o实现多模态实时交互&#xff0c;中国DeepSeek-MoE-16b模型以1/8成本达到同类90%性能&#xff0c;而开源社区如Mistral、LLama 3持续降低技术门槛。这场"闭源商业巨…

Muduo网络库实现 [十五] - HttpContext模块

目录 设计思路 类的设计 解码过程 模块的实现 私有接口 请求函数 解析函数 公有接口 疑惑点 设计思路 记录每一次请求处理的进度&#xff0c;便于下一次处理。 上下文模块是Http协议模块中最重要的一个模块&#xff0c;他需要记录每一次请求处理的进度&#xff0c;需…

解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution

目录 问题描述解决方案为什么需要这样配置&#xff1f; 问题描述 在你的项目中&#xff0c;如果你遇到了以下错误信息&#xff1a; [ERROR] Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.10.5:test (native-test) on project DIctSystemInJavaUsing…

java 代码错误分析

错误代码 class Test {private static String name; // 声明一个私有静态变量 namename "World"; // 静态初始化块&#xff0c;给 name 赋值为 "World"System.out.print(name); // 打印 name 的值public static void main(String[] args) {System.out.p…

企业供应链管理

企业供应链管理 企业供应链管理 企业供应链管理企业信息化信息化的作用信息化的发展阶段信息化建设的挑战 SRM&#xff08;供应商关系管理&#xff09;SRM架构参考图企业内部系统协作&#xff1a; ERP (企业资源计划)OA (办公自动化)业务功能模块&#xff1a;企业日常办公 EMS …

Pascal语言的系统监控

Pascal语言的系统监控 引言 在现代计算机系统中&#xff0c;系统监控是确保计算机平稳运行的重要组成部分。无论是个人计算机还是大型服务器&#xff0c;监控系统的性能、资源使用及状态&#xff0c;都是提高系统效率、及时发现问题的关键。Pascal语言作为一种结构化编程语言…

出现次数超过一半的数(信息学奥赛一本通-1186)

【题目描述】 给出一个含有n&#xff08;0 < n < 1000&#xff09;个整数的数组&#xff0c;请找出其中出现次数超过一半的数。数组中的数大于-50且小于50。 【输入】 第一行包含一个整数n&#xff0c;表示数组大小&#xff1b; 第二行包含n个整数&#xff0c;分别是数组…

解决 CANoe 多测试用例下固定 IP 地址冲突问题的分析与方案

问题描述&#xff1a; CANoe的测试环境如下&#xff1a; 在Ethernet1总线上&#xff0c;通过VN5620连接了PCU&#xff08;实物&#xff09;&#xff1b; 使用VtestStudio&#xff08;VTS&#xff09;开发&#xff0c;并且生成了三个测试脚本(vtt文件)&#xff0c;分别为&#…

React 项目使用 pdf.js 及 Elasticpdf 教程

摘要&#xff1a;本文章介绍如何在 React 中使用 pdf.js 及基于 pdf.js 的批注开发包 Elasticpdf。简单 5 步可完成集成部署&#xff0c;包括数据的云端同步&#xff0c;示例代码完善且简单&#xff0c;文末有集成代码分享。 1. 工具库介绍与 Demo 1.1 代码包结构 ElasticP…

python爬虫:小程序逆向(需要的工具前期准备)

前置知识点 1. wxapkg文件 如何查看小程序包文件 打开wechat的设置&#xff1a; .wxapkg概述 .wxapkg是小程序的包文件格式&#xff0c;且其具有独特的结构和加密方式。它不仅包含了小程序的源代码&#xff0c;还包括了图像和其他资源文件&#xff0c;这些内容在普通的文件…

Prolog语言的强化学习

Prolog语言的强化学习 引言 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是机器学习的一个重要分支&#xff0c;它通过与环境交互来学习最优策略&#xff0c;以最大化累积奖励。在强化学习中&#xff0c;智能体&#xff08;Agent&#xff09;通过试错方式与环…