算法思想之位运算(二)
欢迎拜访:雾里看山-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) <= 100
s[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.length
1 <= n <= 104
0 <= nums[i] <= n
nums
中的所有数字都 独一无二进阶:你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?
算法思路
设数组的大小为 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 隶属专栏:算法 目录 滑动窗口算法介绍六大基础位运算符常用模板总结 例题判定字符是否唯一题目链接题目描述算法思路代码实现 汉明距离题目链接题目…...
软考笔记day04
寻址方式 CISC RISC 流水线技术 存储系统 1、层次化存储系统 2、Cache 3、主存编址计算 输入输出技术 I/O 总线...
本地电脑如何连接windows云服务器
进行远程连接需要几个数据:用户名、密码、公网IP 打开本地cmd,输入命令mstsc打开远程连接面板, 在计算机输入框中输入云服务器的IP地址 点击“选项”展开,点击“本地资源”,然后点击“详细信息” 用户名通常为admin…...
Linux内核常见的调度策略
在 Linux 内核中,调度策略决定了任务如何被分配 CPU 时间以及任务之间的优先级关系。以下是五种常见的调度策略:STOP、DL(Deadline)、RT(Real-Time)、CFS(Completely Fair Scheduler)…...
【Linux】进程优先级、进程切换、进程调度
Linux 1.进程优先级1.基本概念2.查看进程1.UID2.PRI、NI3.修改优先级(PRI) 3.竞争、独立、并行、并发 2.进程切换3.进程调度1.活动队列2.过期队列3.active、expired指针 1.进程优先级 1.基本概念 优先级:进程得到 CPU 资源分配的先后顺序。优…...
HCIP第十二天
LSA --- 链路状态通告 链路状态类型,链路状态ID,通告路由器 --- LSA的三元组 --- 可以唯一的标识出一条LSA Type --- OSPFv2中,常见的需要掌握LSA有6种 LS ID --- LSA的名字 --- 因为每一种LSA LS ID的生成方式都不相同,所以&am…...
Magnet Pro Macbook窗口分屏管理软件【提高效率工具】
Magnet Pro Macbook窗口分屏管理软件【提高效率工具】 一、介绍 Magnet Pro for Mac,是一款功能强大的窗口分屏管理软件,具有多种布局模式、窗口布局功能和其他工具,可以帮助您高效地进行多任务处理和管理工作。 拖动窗口到边缘,…...
控制单元(Control Unit, CU)
一、控制单元的定义与核心作用 控制单元 是 CPU 的核心部件之一,负责 解析指令、生成控制信号 并 协调各硬件部件 的工作时序,确保指令按预定流程正确执行。 核心定位:计算机系统的“指挥中心”,通过控制总线与运算器、存储器、…...
JavaWeb 课堂笔记 —— 10 MySQL DML + DQL
本系列为笔者学习JavaWeb的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖SpringMyBatisSpringMVCSpringBoot等)》,章节分布参考视频教程,为同样学习…...
基于 LSTM 的多特征序列预测-SHAP可视化!
往期精彩内容: 单步预测-风速预测模型代码全家桶-CSDN博客 半天入门!锂电池剩余寿命预测(Python)-CSDN博客 超强预测模型:二次分解-组合预测-CSDN博客 VMD CEEMDAN 二次分解,BiLSTM-Attention预测模型…...
【C++】哈希扩展海量数据处理
目录 位图 位图面试题 C库中的位图bitset 位图优缺点 位图相关题目 布隆过滤器 布隆过滤器的介绍 布隆过滤器的应用 海量数据处理 位图 位图面试题 1.给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个整数是否在这40亿…...
考研数据结构精讲:数组与特殊矩阵的压缩存储技巧(包含真题及解析)
考研数据结构精讲:数组与特殊矩阵的压缩存储技巧 一、数组基础概念 1.1 数组的定义 数组是由相同数据类型的元素构成的有限序列,具有以下核心特性: 维度特性:支持一维到多维结构(常见二维数组)随机访问…...
【Android】ContentResolver的使用
在 Android 中,ContentResolver 是一个非常重要的类,它提供了与 ContentProvider 进行交互的方法。ContentProvider 是用于在不同应用程序之间共享数据的标准接口,而 ContentResolver 则是从客户端(如 Activity 或 Service&#x…...
Python 的 collections 模块
1. deque (双端队列) 定义 deque(读作 “deck”,即双端队列)是一个支持从两端高效添加和删除元素的数据结构。相比列表(list)在头部操作的 O(n) 时间复杂度,deque 的两端操作都是 O(1)。 用途 队列和栈…...
浏览器发起调用到服务器的全过程解析
在 Web 应用的交互过程中,从用户在浏览器输入 URL 发起请求,到最终获取服务器返回的内容,背后涉及多个复杂而有序的步骤。理解这一过程,对于深入掌握 Web 开发、优化应用性能以及排查网络问题都具有重要意义。下面将详细阐述浏览器…...
塑料瓶识别分割数据集labelme格式976张1类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):976 标注数量(json文件个数):976 标注类别数:1 标注类别名称:["Trash plastic"] 每个类别标注的框数…...
RuoYi-Vue升级为https访问-后端安装SSL证书(单台Linux服务器部署)
一、前言 当Nginx已经作为反向代理并成功配置了SSL证书时,前端客户端与Nginx的通信已经是加密的。但Nginx和后端服务之间的连接可能仍然存在明文传输的风险。 如果Nginx和后端服务位于同一台物理机器或者通过安全的内部网络(如私有VLAN或防火墙保护的内网)进行通信,则可以…...
【学习笔记】文件上传漏洞--中间件解析漏洞、编辑器安全
目录 一、IIS 二、Apache HTTP Server 三、Apache HTTPD 未知后缀解析漏洞 四、Apache HTTPD 换行解析漏洞 五、黑、白名单 六、nginx解析漏洞 七、编辑器漏洞 一、IIS 文件夹 正常:image/qq.jpg 执行:image.asp/qq.jpg qq.jpg就会被当做asp解…...
【论文阅读】UniAD: Planning-oriented Autonomous Driving
一、Introduction 传统的无人驾驶采用了区分子模块的设计,即将无人驾驶拆分为感知规划控制三个模块,这虽然能够让无人驾驶以一个很清晰的结构实现,但是感知的结果在传达到规划部分的时候,会导致部分信息丢失,这势必会…...
【第16届蓝桥杯C++C组】--- 数位倍数
Hello呀,小伙伴们,第16届蓝桥杯也完美结束了,无论大家考的如何,都要放平心态,今年我刚上大一,也第一次参加蓝桥杯,刷的算法题也只有200来道,但是还是考的不咋滴,但是拿不…...
【腾讯云智】20250329笔试算法题
文章目录 第一题1. 题目描述2. 思路解析3. AC代码 第二题1. 题目描述2. 思路解析3. AC代码 第三题1. 题目描述2. 思路解析3. AC代码 第一题 1. 题目描述 题目链接:牛牛的水果店 2. 思路解析 这题比较简单,按数学思维把题目的意思翻译过来就是给你一…...
【2025最新】windows本地部署LightRAG,完成neo4j知识图谱保存
之前在服务器部署neo4j失败,无奈只能在本地部署,导致后期所有使用的知识图谱数据都存在本地,这里为了节省时间,先在本地安装LigthRAG完成整个实验流程,后续在学习各种服务器部署和端口调用。从基础和简单的部分先做起来…...
思考力提升的黄金标准:广度、深度与速度的深度剖析
文章目录 引言一、广度的拓展:构建多元知识网络1.1 定义与重要性1.2 IT技术实例与提升策略小结:构建多元知识网络,提升IT领域思考力广度 二、深度的挖掘:追求知识的精髓2.1 定义与重要性2.2 IT技术实例与提升策略小结:…...
7个向量数据库对比:Milvus、Pinecone、Vespa、Weaviate、Vald、GSI 和 Qdrant
7个向量数据库对比:Milvus、Pinecone、Vespa、Weaviate、Vald、GSI 和 Qdrant 本文简要总结了当今市场上正在积极开发的7个向量数据库,Milvus、Pinecone、Vespa、Weaviate、Vald、GSI 和 Qdrant 的详细比较。 我们已经接近在搜索引擎体验的基础层面上涉…...
计算机组成原理笔记(十五)——3.5指令系统的发展
不同类型的计算机有各具特色的指令系统,由于计算机的性能、机器结构和使用环境不同,指令系统的差异也是很大的。 3.5.1 x86架构的扩展指令集 x86架构的扩展指令集是为了增强处理器在多媒体、三维图形、并行计算等领域的性能而设计的。这些扩展指令集通…...
Rust 中的Relaxed 内存指令重排演示:X=0 Y=0 是怎么出现的?
🔥 Rust 中的内存重排演示:X0 && Y0 是怎么出现的? 在并发编程中,我们经常会听说“内存重排(Memory Reordering)”这个术语,但它似乎总是只出现在理论或者别人口中的幻觉里。本文将通过…...
vp 2023 icpc 合肥 解题补题记录 [F E J G]
gym 链接: https://codeforces.com/gym/104857 F. Colorful Balloons 血签, 用 map 存一下每个颜色气球出现的次数, 找出出现次数大于一半的颜色. #include<bits/stdc.h> using namespace std;#define int long long #define endl \nsigned main() {int n;cin >> …...
学习SqlSugar的跨库查询基本用法
使用SqlSugar操作数据库通常都是单库操作,跨库查询的情况要么是单个系统数据不完整,需要其它系统的关联业务数据支撑,要么就是需要整合汇总多个系统的数据进行数据数据分析、处理、展示。遇到上述情况,可以要求另外的系统提供查询…...
智慧工厂可视化系统,赋能工业生产智能化升级
借助图扑软件 HT 搭建智慧工厂可视化系统。利用先进 3D 建模,对工厂布局、设备运行、生产流程进行逼真复刻。实时展示设备状态、生产进度、质量检测数据等,助力管理者精准洞察生产,高效决策,推动工厂智能化转型。...
案例驱动的 IT 团队管理:创新与突破之路: 第四章 危机应对:从风险预见到创新破局-4.1.2债务评估模型与优先级排序
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 4.1.2 技术债务评估模型与优先级排序:构建智能决策体系一、技术债务的"冰山效应"与量化困境二、三维评估模型:穿透债务迷雾的探照灯2.1 评…...
nfs共享目录主配置文件权限参数
/etc/exports 文件默认为空文件,需要输入nfs共享命令 格式:共享目录的路径 允许访问的NFS客户端(共享权限参数) #编辑共享目录配置文件(即/etc/exports) [rootserver ~]# mkdir /nfs_share (创建共享的目录…...
C++ 编程指南35 - 为保持ABI稳定,应避免模板接口
一:概述 模板在 C 中是编译期展开的,不同模板参数会生成不同的代码,这使得模板类/函数天然不具备 ABI 稳定性。为了保持ABI稳定,接口不要直接用模板,先用普通类打个底,模板只是“外壳”,这样 AB…...
探索 MCP 和 A2A 协议: 本质上新协议都基于 HTTP的
以下是以 CSDN 博客的形式记录你对 MCP 协议和 A2A 协议数据传递的理解,重点探讨了它们为何基于 HTTP 协议、HTTP 的优势,以及数据传输的本质。文章面向技术社区,结构清晰,适合分享。 探索 MCP 和 A2A 协议:为何新协议…...
Linux网络http与https
应用层协议HTTP 提示 因为现在大多数都是https,所以就用https来介绍http,https比http多了一个加密功能,不影响介绍http。 什么是http 虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的…...
C++ 算法(2):STL list 完全解析,从入门到高效使用
1. list概述 std::list是C标准模板库(STL)中的一个双向链表容器。与vector和deque不同,list不支持随机访问,但它在任何位置插入和删除元素都非常高效,时间复杂度为O(1)。 2. list的基本特性 双向链表结构:每个元素都包含指向前驱…...
【Linux实践系列】:匿名管道收尾+完善shell外壳程序
🔥 本文专栏:Linux Linux实践项目 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 人生总会有自己能力所不及的范围,但是如果你在你能力所及的范围尽了全部的努力,那你还有什么遗…...
Linux基本指令2
1.head 查看文件的前面内容 head 路径 :查看路径开头部分内容,如下图:head /var/log/messages查看/var/log/messages这个日志中前面内容 head -数字 路径 :查看路径开头指定数字行部分内容,如下图:he…...
Tkinter使用Canvas绘制图形
在Tkinter中,Canvas是一个非常强大的控件,用于绘制图形、显示图片和实现自定义图形界面。通过Canvas,您可以绘制各种形状、线条、文本等,并且能够进行灵活的动画和交互。掌握Canvas的使用将使您能够创建丰富的图形界面。 8.1 创建Canvas控件 Canvas控件是一个区域,用于绘…...
CF985G Team Players
我敢赌,就算你知道怎么做,也必然得调试半天才能 AC。 [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 图片来自洛谷。 [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 显然不可能正面计算。所以…...
ngx_conf_read_token - events
file_size ngx_file_size(&cf->conf_file->file.info); 获取 配置文件的大小 此时 file_size364 for ( ;; ) {if (b->pos > b->last) { 此时 b->pos 0x5cd4701487e4 b->last 0x5cd47014893c b->start0x5cd4701487d0 条件不成立 ch *b->pos;…...
L2范数与权重衰退
权重衰退 定义损失函数 $ \ell(\mathbf{w}, b) $ 来衡量模型的预测值与真实值的差距 使用L2范数作为硬性限制 通过限制参数值的选择范围来控制模型容量 min ℓ ( w , b ) s u b j e c t t o ∥ w ∥ 2 ≤ θ \min \ell(\mathbf{w}, b) \quad \\ subject \ to \|\mathbf{w…...
计算机组成原理笔记(十四)——3.4指令类型
一台计算机的指令系统可以有上百条指令,这些指令按其功能可以分成几种类型,下面分别介绍。 3.4.1数据传送类指令 一、核心概念与功能定位 数据传送类指令是计算机指令系统中最基础的指令类型,负责在 寄存器、主存、I/O设备 之间高效复制数…...
GM DC Monitor v2.0 数据中心监控预警平台-CMDB使用教程(第九篇)
SNMP配置管理功能使用手册 本模块主要用于导入设备厂家的mib库文件,也可以手工创建对应的oid信息,用以实现设备的被动监控功能。 另:系统部署完毕后,已经集成了个别厂家的MIB库数据。 设计思路及使用教程 设计思路:通…...
try-with-resources 详解
try-with-resources 详解 一、基本概念 try-with-resources 是 Java 7 引入的语法结构,用于自动管理资源(如文件流、数据库连接等需要关闭的对象)。 核心特点 自动资源释放:无需手动调用 close() 简洁代码:减少 tr…...
第二十四:查看当前 端口号是否被占用
查看当前 端口号是否被占用: mac 情况下: lsof -i :端口号 netstat -an | grep 端口号 系统将显示监听该端口的进程信息,包括进程名称、进程ID、用户和协议等。如果需要更多信息,可以添加-P和-n参数,例如…...
【数据结构与算法】——堆(补充)
前言 上一篇文章讲解了堆的概念和堆排序,本文是对堆的内容补充 主要包括:堆排序的时间复杂度、TOP 这里写目录标题 前言正文堆排序的时间复杂度TOP-K 正文 堆排序的时间复杂度 前文提到,利用堆的思想完成的堆排序的代码如下(包…...
【Web功能测试】Web商城搜索模块测试用例设计深度解析
Web商城的搜索模块功能测试用例设计 1.搜索功能设计 1.1 搜索框设计 位置显眼:通常置于页面顶部中央,符合用户习惯。 智能提示(Autocomplete):输入时实时推荐关键词、商品或分类(如“手机 苹果”&#x…...
ubuntu 18.04安装tomcat,zookeeper,kafka,hadoop,MySQL,maxwell
事情是这样的,因为昨天发现我用的ubuntu16.04官方不维护了,以及之前就觉得不是很好用,于是升级到了18.04。如图: 但是!由于为备份升级前忘记关闭服务,上面装好的东西所剩无几。 于是我重装了。。。 如何启…...
设计模式(结构型)-享元模式
摘要 在软件开发的广阔领域中,随着系统规模的不断膨胀,资源的有效利用逐渐成为了一个至关重要的议题。当一个系统中存在大量相似的对象时,如何优化这些对象的管理,减少内存的占用,提升系统的整体性能,成为了…...
1.1显存
显存是显卡(GPU)专用的高性能内存,负责存储渲染所需的纹理、帧缓冲、几何数据等。其设计直接影响图形性能、分辨率和复杂场景处理能力 苹果统一内存(Unified Memory)、集成显卡共享内存(Integrated Graphi…...