[特殊字符] 蓝桥杯 Java B 组 之位运算(异或性质、二进制操作)
Day 6:位运算(异或性质、二进制操作)
📖 一、位运算简介
位运算是计算机底层优化的重要手段,利用二进制操作可以大大提高运算速度。常见的位运算包括:
- 与(&):
a & b,如果两个二进制位都为1,结果为1,否则为0。 - 或(|):
a | b,如果两个二进制位中至少有一个为1,结果为1,否则为0。 - 异或(^):
a ^ b,如果两个二进制位不同,结果为1,否则为0。 - 取反(~):
~a,按位取反,0变1,1变0。 - 左移(<<):
a << n,将a的二进制表示向左移动n位,相当于a * 2^n。 - 右移(>>):
a >> n,将a的二进制表示向右移动n位,相当于a / 2^n(保留符号位)。 - 无符号右移(>>>):不保留符号位,即高位补
0。
📖 二、只出现一次的数字(Single Number)
🔹 1. 题目描述
给定一个非空整数数组,除了某个数字只出现一次以外,其他数字均出现两次。请找出这个只出现一次的数字。
示例
输入: nums = [4, 1, 2, 1, 2]
输出: 4
🔹 2. 思路与分析
- 利用异或运算
^- 性质1:
a ^ a = 0,任意数与自身异或为0。 - 性质2:
a ^ 0 = a,任意数与0异或仍是自身。 - 性质3:异或满足交换律和结合律,即
a ^ b ^ c = a ^ c ^ b,顺序无关。 - 性质4:
a ^ b ^ b = a,某个数字b出现偶数次,它们会相互抵消。
- 性质1:
因此,将所有数字进行异或操作,所有成对出现的数字都会抵消为 0,最终结果就是那个只出现一次的数字。
🔹 3. 代码实现(只出现一次的数字)
public class SingleNumber {public int findSingleNumber(int[] nums) {int result = 0;for (int num : nums) {result ^= num; // 利用异或运算找出唯一的数}return result;}public static void main(String[] args) {SingleNumber solution = new SingleNumber();int[] nums = {4, 1, 2, 1, 2};System.out.println("只出现一次的数字: " + solution.findSingleNumber(nums)); // 输出 4}
}
🔹 4. 代码讲解
result ^= num:将数组中的所有数字进行异或。- 成对的数字会被消除,只剩下唯一出现一次的数字。
✅ 时间复杂度:O(n),只需遍历一次数组。
✅ 空间复杂度:O(1),只使用一个变量存储结果。
📖 三、二进制中 1 的个数(Hamming Weight)
🔹 1. 题目描述
编写一个函数,计算一个整数的二进制表示中 1 的个数。
示例
输入: n = 9 (1001)
输出: 2
🔹 2. 思路与分析
方法 1️⃣:位运算逐位检查
- 每次检查
n的最低位是否为1(n & 1)。 - 右移
n一位(n >>= 1),直到n变为0。
方法 2️⃣:n & (n - 1) 高效算法
- 性质:
n & (n - 1)可以移除n最右边的1,这样1的个数就等于操作n & (n - 1)多少次。
🔹 3. 代码实现(方法 1:逐位检查)
public class HammingWeight {public int countOnes(int n) {int count = 0;while (n != 0) {count += (n & 1); // 检查最低位是否为1n >>= 1; // 右移一位}return count;}public static void main(String[] args) {HammingWeight solution = new HammingWeight();int n = 9; // 二进制: 1001System.out.println("二进制中 1 的个数: " + solution.countOnes(n)); // 输出 2}
}
🔹 4. 代码实现(方法 2:n & (n - 1))
public class HammingWeightOptimized {public int countOnes(int n) {int count = 0;while (n != 0) {n &= (n - 1); // 清除最低位的1count++;}return count;}public static void main(String[] args) {HammingWeightOptimized solution = new HammingWeightOptimized();int n = 9; // 二进制: 1001System.out.println("二进制中 1 的个数: " + solution.countOnes(n)); // 输出 2}
}
🔹 5. 代码讲解
方法 1:
- 时间复杂度 O(log n),因为
n的二进制长度最多为log n。 - 空间复杂度 O(1)。
方法 2:
- 时间复杂度 O(k),其中
k是n中1的个数,比 O(log n) 更快。 - 空间复杂度 O(1)。
n & (n - 1) 计算次数等于 1 的个数,比 O(log n) 更快。
📖 四、位运算总结
1. 常用位运算技巧
| 运算 | 作用 |
|---|---|
a & 1 | 判断 a 是否为奇数 |
| `a | (1 << k)` |
a & ~(1 << k) | 将 a 的第 k 位置 0 |
a ^ (1 << k) | 翻转 a 的第 k 位 |
n & (n - 1) | 清除 n 的最低位 1 |
n & (-n) | 获取 n 的最低位 1 |
2. 位运算的常见应用
- 判断奇偶数:
n & 1 == 1(奇数),n & 1 == 0(偶数)。 - 求
n的二进制中1的个数。 - 交换两个数:
a = a ^ b; b = a ^ b; a = a ^ b;(不使用额外空间)。 - 判断
n是否是 2 的幂:n > 0 && (n & (n - 1)) == 0。
🎯 练习建议
- 理解异或运算的性质,练习 "只出现一次的数字"。
- 熟练掌握
n & (n - 1),用于清除最低位1的优化技巧。 - 多做位运算相关题目,包括位掩码、二进制操作。
相关文章:
[特殊字符] 蓝桥杯 Java B 组 之位运算(异或性质、二进制操作)
Day 6:位运算(异或性质、二进制操作) 📖 一、位运算简介 位运算是计算机底层优化的重要手段,利用二进制操作可以大大提高运算速度。常见的位运算包括: 与(&):a &am…...
[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction
论文网址:[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码:GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …...
LTO优化详解
嵌入式开发过程中的LTO优化是什么意思?能够用来解决什么问题?它都优化了哪些?仅开启LTO真的可以优化SIZE的问题吗? 请分别回答我刚才提到的问题? 嗯,用户问关于嵌入式开发中的LTO优化,我需要详细解释这个概…...
分布式事务三阶段协议
分布式事务的三阶段分别是准备阶段、预提交阶段和提交 / 回滚阶段,以下是详细介绍: 三阶段提交协议可以理解为两阶段提交协议的改良版,是在协调者和参与者中都引入超时机制,并且把两阶段提交协议的第一个阶段分成了两步: 询问&am…...
LLaMA-Factory|微调大语言模型初探索(4),64G显存微调13b模型
上篇文章记录了使用lora微调deepseek-7b,微调成功,但是微调llama3-8b显存爆炸,这次尝试使用qlora微调HQQ方式量化,微调更大参数体量的大语言模型,记录下来微调过程,仅供参考。 对过程不感兴趣的兄弟们可以直…...
常用高压缩率的视频容器格式,并进行大比例压缩
常用的高压缩率视频容器格式,包括*.mp4 、*.mkv、*.webM等。 容器格式本身并不直接决定压缩率,而是取决于容器中所使用的视频编码格式等因素。不过,在常见的视频容器格式中,一些容器在搭配特定编码格式时,通常能表现出较高的压缩效率,以下是相关介绍: 1 MKV格式 …...
代码编译(词法义)
1.预处理 (Preprocessing): 在这个阶段,编译器会处理所有以 # 开头的指令,如 #include、#define 等。它会把头文件的内容插入到源代码中,进行宏替换等预处理操作,生成一个纯净的代码文件。 3.词法分析 (Lexical Analy…...
android,flutter 混合开发,pigeon通信,传参
文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性,安全性,性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle,添加 Flutter module3. 在 Android app 的 build.gradl…...
at32f403a rt thread led基础bsp工程测试
1.led工程官方bsp使用 导出一个独立的AT32F403A的BSP工程 下载RTT源代码 gitee更新较慢 https://gitee.com/rtthread/rt-thread github版本更新最新 https://github.com/RT-Thread/rt-thread. 切换到V5.1.0分支(使用一个发布版本可以避免不必要的bug) 导出一个独立的AT32BSP…...
DeepSeek写贪吃蛇手机小游戏
DeepSeek写贪吃蛇手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端贪吃蛇H5文件: 要求 蛇和食物红点要清晰,不超过屏幕外 下方有暂停和重新…...
【好玩的工具和命令】 ASCII 艺术生成工具: figlet
figlet 是一款用于生成 ASCII 艺术文字的工具,支持多种字体样式。它能将输入的文本转换为由字符组成的大型字母图案,广泛应用于命令行环境下的标题展示或装饰。 核心功能 生成 ASCII 文字艺术:将普通文本转化为大号的、由字符构成的艺术字…...
工具--安川伺服故障代码
上传一下安川伺服故障代码,后续结合实际维修经验,逐个整理分析,绝对超出手册经验 故障代码 故障描述 a.020/a.02 用户参数和数检查异常 1 a.021/a.02 参数格式化异常 1 a.022/a.02 系统参数和数检查异常 1 a.023/a.02 参数密码异常…...
车载软件架构 --- OEM主机厂如何打入软件供应商内部?
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...
AI 编程助手 cursor的系统提示词 prompt
# Role 你是一名极其优秀具有10年经验的产品经理和精通java编程语言的架构师。与你交流的用户是不懂代码的初中生,不善于表达产品和代码需求。你的工作对用户来说非常重要,完成后将获得10000美元奖励。 # Goal 你的目标是帮助用户以他容易理解的…...
Matlab写入点云数据到Rosbag
最近有需要读取一个点云并做处理后,重新写回rosbag。网上有很多读取的教程,但没有写入。自己写入时也遇到了很多麻烦,踩了一堆坑进行记录。 1. rosbag中一个lidar的msg有哪些信息? 通过如下代码,先读取一个rosbag的l…...
业务流程相关的权威认证和培训有哪些
业务流程的认证和培训种类繁多,旨在帮助专业人士掌握业务流程管理 (BPM) 的知识和技能,从而提升个人职业发展和组织运营效率。下面分别介绍: 一、 业务流程认证和培训的种类 业务流程的认证和培训可以大致分为以下几类,涵盖了不…...
基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【算法系列】荷兰国旗问题:三指针法原地排序
一、题目(leetcode75 颜色分类 --三分数组) 二、思路 算法核心:三指针分治策略 该问题被称为“荷兰国旗问题”(Dutch National Flag Problem),由计算机科学家Edsger Dijkstra提出。其核心思想是通过三个指针将数组划分为三个区…...
DeepSeek R1本地+私有云版医疗AI部署开发成功案例技术剖析
1. 引言 1.1 研究背景与意义 随着科技的飞速发展,人工智能(AI)在医疗领域的应用正逐渐成为推动医疗行业变革的重要力量。近年来,医疗 AI 取得了显著的进展,从疾病诊断、药物研发到医疗管理等各个环节,AI 技术都展现出了巨大的潜力。它能够处理和分析海量的医疗数据,为…...
ARM64 Trust Firmware [五]
本章介绍 ATF 中的 Runtime Service 是如何定义和被调用的。 要了解 SMC,必须从 SMC 指令本身开始,其指令如下图: 指令格式为:SMC #<imm>,从官方文档了解到该指令只能在 EL1 以及更高的异常等级上调用ÿ…...
超导体-硅约瑟夫森结技术解析与应用
1. 超导体-硅约瑟夫森结技术解析约瑟夫森结作为连接经典与量子世界的桥梁,其核心在于两个超导体之间形成的弱耦合结构。当我在实验室第一次观察到4.2K温度下NbN/a-Si/NbN结的I-V特性曲线时,那个清晰的能隙电压跳变让我至今难忘。这种超导体-硅-超导体(SC…...
从Halcon仿射变换到机械手抓取:手把手教你用vector_to_hom_mat2d完成九点标定与坐标映射(附完整HDevelop代码)
工业视觉九点标定实战:Halcon仿射变换在机械手抓取中的精准坐标映射 当机械臂需要准确抓取传送带上的零件时,视觉系统与机械手的坐标对齐成为关键。想象一下:相机识别到的螺丝孔像素坐标是(1024,768),但机械手的世界坐标系中这个…...
动态内存压缩技术:优化大语言模型显存占用
1. 动态内存压缩技术解析:突破大语言模型部署瓶颈在生成式AI领域,大语言模型(LLM)的部署一直面临内存占用的严峻挑战。以Llama-2-70B模型为例,当处理4096个token的上下文时,仅KV缓存就需要占用约40GB显存,这几乎耗尽了…...
终极游戏音频解密指南:如何使用acbDecrypter快速提取加密音频
终极游戏音频解密指南:如何使用acbDecrypter快速提取加密音频 【免费下载链接】acbDecrypter 项目地址: https://gitcode.com/gh_mirrors/ac/acbDecrypter 你是否遇到过想要提取游戏中的背景音乐或音效,却发现音频文件被加密无法直接播放&#x…...
线性回归与随机梯度下降(SGD)的Python实现
1. 线性回归与随机梯度下降基础解析线性回归是机器学习领域最基础且应用最广泛的算法之一。它的核心思想是通过线性组合输入特征来预测连续型输出值。在实际应用中,我们经常会遇到需要从零开始实现算法的情况,这不仅有助于深入理解算法原理,也…...
PyTorch实现线性回归:从基础到实战
1. 线性预测的基础概念线性预测是机器学习中最基础也最重要的建模方式之一。在PyTorch框架中实现线性预测模型,不仅能够帮助我们理解深度学习的底层原理,也是掌握更复杂神经网络架构的必要前提。线性模型的核心思想可以用一个简单的数学公式表示…...
告别手动点击!用Windows任务计划+Kitchen.bat搞定Kettle作业定时调度(附完整bat脚本)
告别手动点击!用Windows任务计划Kitchen.bat搞定Kettle作业定时调度(附完整bat脚本) 每天重复点击Kettle Spoon界面执行相同作业的ETL工程师们,是否已经厌倦了这种低效的手动操作?当数据处理成为日常,自动化…...
# 用AI写代码的人越来越多,但能判断AI对不对的人没多几个
用AI写代码的人越来越多,但能判断AI对不对的人没多几个 我是个20年的老程序员,用AI写代码几个月了。 说个真事。有天我用AI查一个Java并发问题,第一次问,它给了个答案,看着挺像回事。我不太放心,换个说法又…...
基于springboot的电影院订票选座 票务员工信息管理系统三个角色
目录同行可拿货,招校园代理 ,本人源头供货商电影院订票选座系统的角色功能分析技术实现要点数据库设计建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 电影院订票选座系统的角色功能…...
Asian Beauty Z-Image Turbo部署教程:Windows WSL2环境下CUDA兼容配置
Asian Beauty Z-Image Turbo部署教程:Windows WSL2环境下CUDA兼容配置 想在自己的电脑上生成独具东方韵味的人像写真,又担心在线工具泄露隐私?今天,我们就来手把手教你,如何在Windows系统上,通过WSL2&…...
