[特殊字符] 蓝桥杯 Java B 组 之位运算(异或性质、二进制操作)

embedded/2025/2/26 3:40:12/

Day 6:位运算(异或性质、二进制操作)


📖 一、位运算简介

位运算是计算机底层优化的重要手段,利用二进制操作可以大大提高运算速度。常见的位运算包括:

  • 与(&)a & b,如果两个二进制位都为 1,结果为 1,否则为 0
  • 或(|)a | b,如果两个二进制位中至少有一个为 1,结果为 1,否则为 0
  • 异或(^)a ^ b,如果两个二进制位不同,结果为 1,否则为 0
  • 取反(~)~a,按位取反,0110
  • 左移(<<)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. 思路与分析

  • 利用异或运算 ^
    • 性质1a ^ a = 0,任意数与自身异或为 0
    • 性质2a ^ 0 = a,任意数与 0 异或仍是自身。
    • 性质3:异或满足交换律结合律,即 a ^ b ^ c = a ^ c ^ b,顺序无关。
    • 性质4a ^ b ^ b = a,某个数字 b 出现偶数次,它们会相互抵消。

因此,将所有数字进行异或操作,所有成对出现的数字都会抵消为 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️⃣:位运算逐位检查

  1. 每次检查 n 的最低位是否为 1n & 1)。
  2. 右移 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),其中 kn1 的个数,比 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. 位运算的常见应用

  1. 判断奇偶数n & 1 == 1(奇数),n & 1 == 0(偶数)。
  2. n 的二进制中 1 的个数
  3. 交换两个数a = a ^ b; b = a ^ b; a = a ^ b;(不使用额外空间)。
  4. 判断 n 是否是 2 的幂n > 0 && (n & (n - 1)) == 0

🎯 练习建议

  1. 理解异或运算的性质,练习 "只出现一次的数字"
  2. 熟练掌握 n & (n - 1),用于清除最低位 1 的优化技巧。
  3. 多做位运算相关题目,包括位掩码、二进制操作


http://www.ppmy.cn/embedded/167184.html

相关文章

ios UICollectionView使用自定义UICollectionViewCell

和UITableView用法类似&#xff0c;UITableView主要是显示按行排列的数据&#xff0c;UICollectionView则用在显示多行多列的数据&#xff0c;今天我们继续来实现app下载页面的效果。 1.先自定义UICollectionViewCell&#xff0c;一个cell就相当于列表中的一项了。 记得勾上&a…

Web自动化之Selenium添加网站Cookies实现免登录

在使用Selenium进行Web自动化时&#xff0c;添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为&#xff0c;我们可以将已登录状态的Cookies存储起来&#xff0c;并在下次自动化测试或爬虫任务中直接加载这些Cookies&#xff0c;从而跳过登录步骤。 Cookies简介 …

关于 Grok-3 大语言模型的研究

摘要:本文深入研究埃隆・马斯克旗下 xAI 团队研发的大语言模型 Grok-3。Grok-3 依托强大的超级计算基础设施,采用独特训练数据策略与创新模型架构,在性能指标、功能特性及应用场景展现出显著优势,同时也引发技术争议与行业格局变动,对人工智能发展影响深远。 关键词:Grok…

百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用

在私有云环境中成功部署 DeepSeek 满血版并实现性能调优&#xff0c;并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试&#xff0c;成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…

如何排查服务器 DNS 解析失败的问题

DNS&#xff08;Domain Name System&#xff09;解析是将域名转换为 IP 地址的过程。DNS 解析失败会导致服务器无法访问外部资源或用户无法访问服务器。以下是详细的排查步骤和方法。 1. 确认问题现象 首先&#xff0c;明确问题的具体表现&#xff1a; 服务器无法访问特定域名…

AI知识架构之AIGC

AIGC 基础概念 定义与范畴 定义:AIGC 即 Artificial Intelligence Generated Content,指利用人工智能技术生成内容。这意味着人工智能不再仅仅是分析或处理现有数据,而是能够主动创造出文本、图像、音频、视频等各种形式的内容。范畴:其涵盖范围广泛,涉及多模态内容。文本…

Python常见面试题的详解16

1. 如何强行关闭客户端和服务器之间的连接&#xff1f; 在网络编程中&#xff0c;有时需要强行中断客户端和服务器之间的连接。对于基于 TCP 协议的连接&#xff0c;由于其面向连接的特性&#xff0c;需要采取特定的步骤来确保连接被正确关闭&#xff1b;而 UDP 是无连接协议&a…

51单片机-AT24CXX存储器工作原理

1、AT24CXX存储器工作原理 1.1、特点&#xff1a; 与400KHz&#xff0c;I2C总线兼容1.8到6.0伏工作电压范围低功耗CMOS技术写保护功能当WP为高电平时进入写保护状态页写缓冲器自定时擦写周期100万次编程/擦除周期可保存数据100年8脚DIP SOIC或TSSOP封装温度范围商业级和工业级…