优选算法——位运算


👇作者其它专栏

《数据结构与算法》《算法》《C++起始之路》


1.前要知识

《位操作符的妙用》

2.相关题解

2.1判定字符是否唯一

算法思路:

利用【位图】的思想,每一个【比特位】代表一个【字符】,一个int类型的变量的32位足够表示所有的小写字母。比特位里若为0,表示这个字符没有出现过;若为1,表示该字符出现过。

可以用一个【整数】来充当【哈希表】。

class Solution { public: bool isUnique(string astr) { //利用鸽巢原理优化 if(astr.size()>26) return false; int bitmap=0; for(auto i:astr){ int e=i-'a'; //先判断字符是否出现过 if(((bitmap>>e)&1)==1) return false; //把当前字符加入到位图中 bitmap|=1<<e; } return true; } };

2.2消失的数字

算法思路:

设数组的大小为n,则之前的数组就是[0,n],数组中是[0,n]中缺失一个数形成的序列。若,我们把数组中的所有数,以及[0,n]中的所有数全部【异或】在一起,那么根据【异或】运算的【消消乐】规则,最终的异或结果就是缺失的数字。

//1.哈希 2.高斯定理 3.位运算 4.排序+(暴力或二分) class Solution { public: int missingNumber(vector<int>& nums) { int ret=0; for(auto i:nums) ret^=i; for(int i=0;i<=nums.size();i++) ret^=i; return ret; } };

2.3两整数之和

算法思路:

●异或^运算本质是【无进位加法】;

●按位与&操作能够得到【进位】;

●然后一直循环进行,直到【进位】变成0为止

class Solution { public: int getSum(int a, int b) { while(b){ int x=a^b;//无进位相加的结果 //排除-1的情况 unsigned int carry=(a&b)<<1;//进位 a=x; b=carry; } return a; } };

2.4只出现一次的数字 II

算法思路:

设要找的数为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++){//依次修改ret中的每一位 int sum=0; for(auto x:nums)//计算nums中所有第i位的和 if(x&(1<<i)) sum++; sum%=3; if(sum&1) ret|=1<<i; } return ret; } };

2.5只出现一次的数字 III

算法思路:

1.将所有数异或在一起,由于只有两个数出现一次,其余都出现两次。所以最后的结果为a^b

2.a和b不相等,因此a和b的二进制一定有至少一位不相同,

class Solution { public: vector<int> singleNumber(vector<int>& nums) { //1.将所有的数异或在一起 int tmp=0; for(auto x:nums) tmp^=x; //2.找出a,b中比特位不同的那一位 int diff=0; while(1){ if(((tmp>>diff)&1)==1) break; else diff++; } //3.根据diff位的不同,将所有数划分成两类 int a=0,b=0; for(auto x:nums){ if((1&(x>>diff))==1) b^=x; else a^=x; } return {a,b}; } };

2.6消失的两个数字

本题就是 2.2消失的数字+2.5只出现一次的数字 III组合起来的题。

现将数组中的数和[1,n+2]区间内的所有数【异或】在一起,问题就变成了:有两个数出现了【一次】,其余所有的数出现了【两次】。进而变成了2.5只出现一次的数字 III这道题。

class Solution { public: vector<int> missingTwo(vector<int>& nums) { //1.将所有的数异或在一起 int tmp=0; for(auto x:nums) tmp^=x; for(int i=1;i<=nums.size()+2;i++) tmp^=i; //2.找出a,b中比特位不同的那一位 int diff=0; while(1){ if(((tmp>>diff)&1)==1) break; else diff++; } //3.根据diff位的不同,将所有数划分成两类 int a=0,b=0; for(auto x:nums){ if((1&(x>>diff))==1) b^=x; else a^=x; } for(int i=1;i<=nums.size()+2;i++){ if((1&(i>>diff))==1) b^=i; else a^=i; } return {a,b}; } };

Read more

Agent-Reach:给你的AI装上天眼,零API费用看透整个互联网

Agent-Reach:给你的AI装上天眼,零API费用看透整个互联网

Agent-Reach:给你的AI装上"天眼",零API费用看透整个互联网 当你的AI Agent还在为无法读取最新的技术推文而报错,或者被昂贵的官方API账单拒之门外时,Agent-Reach已经悄悄用你的本地Cookie,帮它把Reddit的热帖和B站的视频字幕完整扒了下来。 一、一场打破"AI断网"魔咒的开源风暴 2026年的科技圈,AI Agent 已经能帮你写代码、改文档、管项目——但你一旦让它去网上找点"活生生"的东西,它就瞬间变成了"瞎子": * 📺 “帮我看看这个YouTube教程讲了什么” → 看不了,拿不到字幕。 * 🐦 “帮我搜一下推特上大家怎么评价这个产品” → 搜不了,Twitter API太贵了。 * 📕 “帮我看看小红书上这个品的口碑” → 打不开,必须登录才能看。 直到GitHub上出现了一个名为 Agent-Reach 的开源项目。它以一种极客且纯粹的方式,彻底终结了AI的"断网时代"

By Ne0inhk

让“小爱音箱PRO”智能起来:接入豆包AI

下面提供从 0 到 1 的完整流程,包含豆包 API 申请、MiGPT 部署、配置与使用,确保你能顺利让小爱音箱 Pro 用上豆包的强大能力。 一、准备工作(必做) 二、申请豆包 API 密钥(关键步骤) 豆包 API 需通过火山引擎方舟平台申请,以下是详细步骤: 1. 注册与实名认证 1. 访问火山引擎官网:https://www.volcengine.com/ 2. 注册账号并完成实名认证(个人 / 企业均可) 3. 登录后进入方舟大模型平台 2. 创建 API 密钥与推理接入点 1. 进入控制台 → API 密钥管理 → 点击 "

By Ne0inhk
医疗AI场景下算法编程的深度解析(2026新生培训讲稿)(五)

医疗AI场景下算法编程的深度解析(2026新生培训讲稿)(五)

第9章 朴素贝叶斯算法:医学文本分类利器 在医疗信息化进程中,非结构化的文本数据占据了医疗信息的很大比重——从电子病历的病程记录、出院小结,到医学文献、临床指南,乃至患者的在线咨询记录。如何从这些海量文本中高效、准确地提取关键信息,是医疗AI面临的重要挑战。朴素贝叶斯(Naïve Bayes)算法以其简单、高效、对高维稀疏数据适应性强的特点,成为医学文本分类任务中的经典利器。本章将从算法原理出发,深入解析朴素贝叶斯在医疗场景中的应用,并通过实战案例展示从文本预处理、特征提取到模型训练与评估的完整流程。 9.1 算法原理 朴素贝叶斯是一系列基于贝叶斯定理的分类算法,其核心是“朴素”的条件独立性假设——在给定类别的情况下,各个特征之间相互独立。尽管这一假设在现实中很少完全成立,但朴素贝叶斯在众多实际任务中仍表现出色,尤其是在文本分类领域。 9.1.1 贝叶斯定理 贝叶斯定理描述了在已知某些条件下,事件发生的概率如何更新。对于分类问题,我们希望计算给定样本 (x) 的条件下,其属于类别 (C_k) 的概率,

By Ne0inhk
打造你的家庭 AI 助手(三):QQ 机器人接入你的 OpenClaw

打造你的家庭 AI 助手(三):QQ 机器人接入你的 OpenClaw

不得不承认腾讯进步的速度太快了,几条命令就可以接入Openclaw,也不用设置IP白名单了,在 QQ开放平台还增加了专门的Openclaw入口: 没啥好说的,很简单,安装完Openclaw之后,执行如下命令(命令也是生成好的): openclaw plugins install @tencent-connect/openclaw-qqbot@latest openclaw channels add--channel qqbot --token"" openclaw gateway restart 以下内容已经过时了,留作纪念 以下内容已经过时了,留作纪念 以下内容已经过时了,留作纪念 ⚠️ 重要提示:如果是家用宽带,没有申请固定 IP 地址的话,大可以放弃这种方式。由于 QQ 开发平台的白名单限制,机器人会非常不稳定,频繁掉线。建议使用云服务器或有固定 IP 的环境部署。 前言 在完成 OpenClaw 安装后,

By Ne0inhk