算法思想之位运算(二)
欢迎拜访:雾里看山-CSDN博客
本篇主题:算法思想之位运算(二)
发布时间:2025.4.13
隶属专栏:算法

目录
- 滑动窗口算法介绍
- 六大基础位运算符
- 常用模板总结
- 例题
- 判定字符是否唯一
- 题目链接
- 题目描述
- 算法思路
- 代码实现
- 汉明距离
- 题目链接
- 题目描述
- 算法思路
- 代码实现
- 丢失的数字
- 题目链接
- 题目描述
- 算法思路
- 代码实现
- 两整数之和
- 题目链接
- 题目描述
- 算法思路
- 代码实现
- 消失的两个数字
- 题目链接
- 题目描述
- 算法思路
- 代码实现
滑动窗口算法介绍
位运算(Bit Manipulation)是算法中的高效技巧,通过直接操作二进制位实现快速计算和优化存储
六大基础位运算符
| 运算符 | 符号 | 描述 | 示例 |
|---|---|---|---|
| 按位与 | & | 两数二进制位同为1时结果为1 | 5 & 3 → 1 (101 & 011 = 001) |
| 按位或 | | | 任一位为1时结果为1 | 5 | 3→7 (101 | 011 = 111) |
| 按位异或 | ^ | 两数位不同时结果为1 ,无进位相加 | 5 ^ 3 → 6 (101 ^ 011 = 110) |
| 按位取反 | ~ | 0变1,1变0 | ~5 → -6(补码表示) |
| 左移 | << | 左移指定位数,低位补0 | 5 << 1 → 10 (101→1010) |
| 右移 | >> | 右移指定位数,高位补符号位(算术右移) | -5 >> 1 → -3 |
常用模板总结
| 功能 | 代码模板 |
|---|---|
| 判断奇偶 | x & 1 → 1为奇,0为偶 |
| 取最低位的1 | x & (-x) |
| 消去最低位的1 | x & (x - 1) |
| 异或交换变量 | a ^= b; b ^= a; a ^= b; |
| 生成所有子集 | for (mask = 0; mask < (1 << n); mask++) |
| 快速幂 | 右移指数,逐位判断累乘 |
例题
判定字符是否唯一
题目链接
面试题 01.01. 判定字符是否唯一
题目描述
实现一个算法,确定一个字符串
s的所有字符是否全都不同。
示例 1:输入: s = “leetcode”
输出: false示例 2:
输入: s = “abc”
输出: true限制:
0 <= len(s) <= 100s[i]仅包含小写字母- 如果你不使用额外的数据结构,会很加分。
算法思路
利⽤位图的思想,每一个比特位代表一个字符,一个 int 类型的变量的 32 位足够表示所有的小写字母。比特位里面如果是 0 ,表示这个字符没有出现过。比特位里面的值是 1 ,表示该字符出现过。
那么我们就可以用一个整数来充当哈希表。
代码实现
class Solution {
public:bool isUnique(string astr) {if(astr.size() > 26)return false;int num = 0;for(auto c : astr){if(num>>(c-'a')&1)return false;elsenum |= 1<<(c-'a');}return true;}
};

汉明距离
题目链接
461. 汉明距离
题目描述
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数x和y,计算并返回它们之间的汉明距离。
示例 1:输入:x = 1, y = 4
输出:2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。示例 2:
输入:x = 3, y = 1
输出:1提示:
0 <= x, y <= 231 - 1
算法思路
对两个数进行异或操作,异或后1的个数,即为汉明距离。直接使用模板中消去最低位的1,直到变量为零,用一个变量计算次数即可。
代码实现
class Solution {
public:int hammingDistance(int x, int y) {int ret = 0, n = x ^ y;while(n){n&=(n-1);ret++;}return ret;}
};

丢失的数字
题目链接
268. 丢失的数字
题目描述
给定一个包含
[0, n]中n个数的数组nums,找出[0, n]这个范围内没有出现在数组中的那个数。
示例 1:输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 2:
输入:nums = [0,1]
输出:2
解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 3:
输入:nums = [9,6,4,2,3,5,7,0,1]
输出:8
解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。提示:
n == nums.length1 <= n <= 1040 <= nums[i] <= nnums中的所有数字都 独一无二进阶:你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?
算法思路
设数组的大小为 n ,那么缺失之前的数就是 [0, n] ,数组中是在 [0, n] 中缺失一个数形成的序列。
如果我们把数组中的所有数,以及 [0, n] 中的所有数全部异或在一起,那么根据异或运算的消消乐规律,最终的异或结果应该就是缺失的数。
代码实现
class Solution {
public:int missingNumber(vector<int>& nums) {int n = nums.size();int ret = 0;for(auto num : nums)ret^=num;for(int i = 0; i <= n; i++)ret^=i;return ret;}
};

两整数之和
题目链接
371. 两整数之和
题目描述
给你两个整数
a和b,不使用 运算符+和-,计算并返回两整数之和。
示例 1:输入:a = 1, b = 2
输出:3示例 2:
输入:a = 2, b = 3
输出:5
提示:
-1000 <= a, b <= 1000
算法思路
- 异或
^运算本质是无进位加法; - 按位与
&操作能够得到进位; - 然后一直循环进行,直到进位变成
0为止。
代码实现
class Solution {
public:int getSum(int a, int b) {int sum = 0, carry = 0;do{sum = a ^ b;// 无进位相加carry = (a&b)<<1;// 进位操作a = sum;b = carry;}while(carry != 0);return sum;}
};

消失的两个数字
题目链接
面试题 17.19. 消失的两个数字
题目描述
给定一个数组,包含从
1到N所有的整数,但其中缺了两个数字。你能在O(N)时间内只用O(1)的空间找到它们吗?
以任意顺序返回这两个数字均可。
示例 1:输入:[1]
输出:[2,3]示例 2:
输入:[2,3]
输出:[1,4]提示:
nums.length <= 30000
算法思路
本题就是 268. 丢失的数字 + 260. 只出现⼀次的数字 III 组合起来的题。
先将数组中的数和 [1, n + 2] 区间内的所有数异或在一起,问题就变成了:有两个数出现了一次,其余所有的数出现了两次。进而变成了 260. 只出现⼀次的数字 III 这道题。
代码实现
class Solution {
public:vector<int> missingTwo(vector<int>& nums) {int n = nums.size() + 2;int sum = 0;for(auto num : nums)sum ^= num;for(int i = 1; i <= n; i++)sum ^= i;int low = (sum==INT_MIN ? sum : sum&(-sum));// 取出最低位int ans1 = 0, ans2 = 0;for(auto num : nums){if(num & low)ans1^=num;elseans2^=num;}for(int i = 1; i <= n; i++){if(i & low)ans1^=i;else ans2^=i;}return {ans1, ans2};}
};

⚠️ 写在最后:以上内容是我在学习以后得一些总结和概括,如有错误或者需要补充的地方欢迎各位大佬评论或者私信我交流!!!
相关文章:
算法思想之位运算(二)
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之位运算(二) 发布时间:2025.4.13 隶属专栏:算法 目录 滑动窗口算法介绍六大基础位运算符常用模板总结 例题判定字符是否唯一题目链接题目描述算法思路代码实现 汉明距离题目链接题目…...
Collection vs Collections:核心区别与面试指南
Collection vs Collections:核心区别与面试指南 一、本质区别(核心记忆点) 维度CollectionCollections身份集合框架的根接口操作集合的工具类包位置java.utiljava.util是否可实例化❌ 接口✅ 类(但构造器私有,不可实…...
win10中快速访问部分外网的快捷设置方法
目的 不翻墙而访问一些本来访问很慢的网站。 具体操作 例如想要访问 github 网站,首先在终端(Terminal,cmd或powershell)中通过 ping github.com 判断网站是否可以被ping到: 若返回 Request time out. 则说明本方法不可用。若收到Reply&am…...
【计网】网络交换技术之报文交换(复习自用,了解,重要3)
复习自用的,处理得比较草率,复习的同学或者想看基础的同学可以看看,大佬的话可以不用浪费时间在我的水文上了 另外两种交换技术可以直接点击链接访问相关笔记: 电路交换 分组交换 一、报文交换的定义 报文交换(Me…...
【Web功能测试】Web商城搜索模块测试用例设计深度解析
Web商城的搜索模块功能测试用例设计 1.搜索功能设计 1.1 搜索框设计 位置显眼:通常置于页面顶部中央,符合用户习惯。 智能提示(Autocomplete):输入时实时推荐关键词、商品或分类(如“手机 苹果”&#x…...
穿梭在数字王国:Python进制转换奇遇记
穿梭在数字王国:Python进制转换奇遇记 想象一下,你是一位勇敢的探险家,正在穿越神秘的"数字王国"。在这个王国里,不同的地区使用着不同的语言(或者说,进制)。二进制村的居民只懂"0"和"1";八进制镇的人们使用0到7的数字;而十六进制城的…...
【动态规划】深入动态规划:背包问题
文章目录 前言01背包例题一、01背包二、分割等和子集三、目标和四、最后一块石头的重量|| 完全背包例题一、完全背包二、 零钱兑换三、零钱兑换||四、完全平方数 前言 什么是背包问题,怎么解决算法中的背包问题呢? 背包问题 (Knapsack problem) 是⼀种组…...
BUUCTF-web刷题篇(25)
34.the mystery of ip 给出链接,输入得到首页: 有三个按钮,flag点击后发现页面窃取客户端的IP地址,通过给出的github代码中的php文件发现可以通过XFF或Client-IP传入值。使用hackbar或BP 使用XSS,通过github给出的目录…...
StringBuilder类基本使用
文章目录 1. 基本介绍2. StringBuilder常用方法3. String、StringBuffer 和 StringBuilder 的比较4. String、StringBuffer 和 StringBuilder 的效率测试5. String、StringBuffer 和 StringBuilder 的选择 1. 基本介绍 一个可变的字符序列。此类提供一个与StringBuffer兼容的A…...
设计模式 --- 访问者模式
访问者模式是一种行为设计模式,它允许在不改变对象结构的前提下,定义作用于这些对象元素的新操作。 优点: 1.符合开闭原则:新增操作只需添加新的访问者类,无需修改现有对象结构。 2.操作逻辑集中管理&am…...
常用AI辅助编程工具及平台介绍
在当今快速发展的技术领域,AI编程工具已经成为提升开发效率和代码质量的重要手段。这些工具利用人工智能技术来帮助开发者提高编程效率、生成代码建议、自动完成功能,并识别错误。接下来,我们将详细介绍几款主流的AI编程工具及其特点,以帮助你选择最适合自己的开发需求的工…...
HashTable,HashMap,ConcurrentHashMap之间的区别
文章目录 线程安全方面性能方面总结 线程安全方面 HashMap线程不安全,HashMap的方法没有进行同步,多个线程同时访问HashMap,并至少有一个线程修改了其内容,则必须手动同步。 HashTable是线程安全的,在HashMap的基础上…...
LeetCode.225. 用队列实现栈
用队列实现栈 题目解题思路1. push2. pop3. empty CodeQueue.hQueue.cStack.c 题目 225. 用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现…...
LVGL AnalogClock控件和Dclock控件详解
LVGL AnalogClock控件和Dclock控件详解 一、AnalogClock控件详解1. 概述2. 创建模拟时钟2.1 函数2.2 参数2.3 返回值 3. 设置时间3.1 函数3.2 参数 4. 获取时间4.1 函数4.2 参数 5. 设置样式5.1 常用样式属性5.2 示例代码 6. 更新时间6.1 定时器回调示例6.2 创建定时器 7. 示例…...
通过分治策略解决内存限制问题完成大型Hive表数据的去重的PySpark代码实现
在Hive集群中,有一张历史交易记录表,要从这张历史交易记录表中抽取一年的数据按某些字段进行Spark去重,由于这一年的数据超过整个集群的内存容量,需要分解成每个月的数据,分别用Spark去重,并保存为Parquet文…...
深入解析 HTML 中 `<script>` 标签的 async 和 defer 属性
一、背景与问题 在网页性能优化中,脚本的加载和执行方式直接影响页面渲染速度和用户体验。传统 <script> 标签的阻塞行为可能导致页面“白屏”,而 async 和 defer 属性提供了非阻塞的解决方案。本周重点研究二者的差异、适用场景及实际应用。 二、…...
CSS 背景属性学习笔记
CSS 背景属性用于定义 HTML 元素的背景效果,包括背景颜色、背景图像、图像平铺方式、图像定位以及图像是否固定等。以下是关于 CSS 背景属性的详细学习笔记。 一、背景颜色(background-color) background-color 属性用于定义元素的背景颜色…...
WT-yolo数据集配置文件data.yaml的写法示例
YOLO 的 data.yaml 配置文件用于定义数据集的结构和类别信息。这里列出几种常见的写法和示例,在正式训练时需要根据实际需求正确配置 data.yaml 文件。 1. 基础配置(相对路径) 这是最常见的写法,使用相对路径来指定训练集、验证…...
【C++初学】课后作业汇总复习(七) 指针-深浅copy
1、 HugeInt类:构造、、cout Description: 32位整数的计算机可以表示整数的范围近似为-20亿到+20亿。在这个范围内操作一般不会出现问题,但是有的应用程序可能需要使用超出上述范围的整数。C可以满足这个需求,创建功能强大的新的…...
探索加密期权波动率交易的系统化实践——动态对冲工具使用
Trading Volatility – What Are My Options? 在本文中,我们将介绍一些如何交易资产波动性(而非资产价格)的示例。为了帮助理解,我们将使用 Deribit 上提供的几种不同产品,包括但不限于期权。我们将尽可能消除对标的价…...
方案精读:51页 财政数据信息资源目录数据标准存储及大数据资产化规划方案【附全文阅读】
该方案聚焦财政数据信息资源管理,适用于财政部门工作人员、数据管理与分析人员以及关注财政大数据应用的相关人士。 方案旨在构建财政数据资源目录,推动大数据在财政领域的应用与落地。整体规划上,以 “金财工程” 应用支撑平台为基础,建立省、市、县三级目录体系,遵循相关…...
开源实时语音交互大模型Ultravox-cn
一款为实时语音交互设计的快速多模态LLM 概述 Ultravox是一种新型的多模态LLM,能够理解文本和人类语音,无需单独的自动语音识别(ASR)阶段。基于AudioLM、SeamlessM4T、Gazelle、SpeechGPT等研究,Ultravox能够将任何…...
基于web的民宿信息系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 随着信息时代的来临,民宿过去的民宿信息方式的缺点逐渐暴露,对过去的民宿信息的缺点进行分析,采取计算机方式构建民宿信息系统。本文通过阅读相关文献,研究国内外相关技术,提出了一种民宿信息管理、民宿信息管理…...
04-微服务 面试题-mk
文章目录 1.Spring Cloud 常见的组件有哪些?2.服务注册和发现是什么意思?(Spring Cloud 如何实现服务注册发现)3.Nacos配置中心热加载实现原理及关键技术4.OpenFeign在微服务中的远程服务调用工作流程5.你们项目负载均衡如何实现的 ?6.什么是服务雪崩,怎么解决这个问题?…...
【Linux篇】深入理解文件系统:从基础概念到 ext2 文件系统的应用与解析
文件系统的魔法:让计算机理解并存储你的数据 一. 文件系统1.1 块1.2 分区1.3 inode(索引节点) 二. ext2文件系统2.1 认识文件系统2.2 Block Group (块组)2.2.1 Block Group 的基本概念2.2.2 Block Group 的作用 2.3 块组内部结构2.3.1 超级块(Super Bloc…...
C++STL——容器-list(含模拟实现,即底层原理)(含迭代器失效问题)(所有你不理解的问题,这里都有解答,最详细)
目录 1.迭代器的分类 2.list的使用 2.1 list的构造 2.2 list iterator 2.3 list capacity 2.4 list element access 编辑 2.5 list modifiers 编辑2.5.1 list插入和删除 2.5.2 insert /erase 2.5.3 resize/swap/clear 编辑 2.6 list的一些其他接口…...
计算机组成原理笔记(十五)——3.5指令系统的发展
不同类型的计算机有各具特色的指令系统,由于计算机的性能、机器结构和使用环境不同,指令系统的差异也是很大的。 3.5.1 x86架构的扩展指令集 x86架构的扩展指令集是为了增强处理器在多媒体、三维图形、并行计算等领域的性能而设计的。这些扩展指令集通…...
基于时间序列分解与XGBoost的交通通行时间预测方法解析
一、问题背景与数据概览 在城市交通管理系统中,准确预测道路通行时间对于智能交通调度和路径规划具有重要意义。本文基于真实道路传感器数据,构建了一个结合时间序列分解与机器学习模型的预测框架。数据源包含三个核心部分: 道路通行数据(new_gy_contest_traveltime_train…...
基于XGBoost的异烟酸生产收率预测:冠军解决方案解析
1. 引言 在化工生产领域,准确预测产品收率对优化工艺流程、降低生产成本具有重要意义。本文以异烟酸生产为研究对象,通过机器学习方法构建预测模型,在包含10个生产步骤、42个工艺参数的数据集上实现高精度收率预测。该方案在工业竞赛中斩获冠军,本文将深度解析其技术实现细…...
计算机视觉算法实现——电梯禁止电瓶车进入检测:原理、实现与行业应用(主页有源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 电梯安全检测领域概述 近年来,随着电动自行车(以下简称"电瓶车"&…...
