优选算法——位运算


👇作者其它专栏

《数据结构与算法》《算法》《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

Python 高级实战数据到 AI,量化交易与智能应用

Python 高级实战数据到 AI,量化交易与智能应用

一、核心卖点 本课程以Python 高级实战能力为核心,打通数据分析、量化交易、AI 大模型落地三大高薪技能栈,全程以企业真实痛点为导向,不讲空理论、只教能直接用的技术。课程聚焦解决行业最常见问题:数据处理慢、代码难维护、量化策略回测不准、实盘易亏损、AI 模型停留在 Demo 无法落地、项目周期长、性能瓶颈难突破。通过体系化训练,让学员从基础使用者,成长为能独立负责项目、优化系统、搭建策略、对接 AI 并上线部署的全栈型工程师。 二、设计思路 课程采用五模块递进式设计,遵循 “夯实基础→强化能力→核心应用→AI 升级→项目整合” 的学习路径: * 先夯实Python 高阶核心,攻克装饰器、并发编程、GIL、性能调优、Cython/Numba 加速,

By Ne0inhk
Python 调用 豆包大模型Doubao-Seedream-4.5 免费生成图像教程

Python 调用 豆包大模型Doubao-Seedream-4.5 免费生成图像教程

Python 调用 豆包大模型Doubao-Seedream-4.5 免费生成图像教程 关键词:Python 图像生成、Doubao-Seedream-4.5、AI 绘画接口、AIPING 接口调用、OpenAI SDK 最近在测试一些图像生成大模型时,发现 Doubao-Seedream-4.5 对中文描述的理解非常自然,而且目前可以免费调用,非常适合做功能验证和原型测试。 这篇文章就记录一下我从注册到 Python 成功生成图片的完整过程,全部是实测可用的流程。 一、Doubao-Seedream-4.5 简单介绍 Doubao-Seedream-4.5 是一款偏向创意图像生成 / 图像编辑的大模型,支持: * 中文 Prompt * Negative Prompt(反向提示词) * 图像编辑(在已有图片基础上生成) 如果你之前用过 Stable Diffusion 或 Midjourney,上手会非常快。 二、

By Ne0inhk
华为OD机试双机位C卷:挑选宝石 (C/C++/Python/JAVA/JS/GO)

华为OD机试双机位C卷:挑选宝石 (C/C++/Python/JAVA/JS/GO)

挑选宝石 2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解 题目描述 游乐园有一款互动游戏,游戏开始时会提供n个宝石,每个宝石都一个属性值a1,a2,…an.玩家在游戏前可以挑选x颗宝石,将这些宝石的属性值相乘组成玩家的属性值。游戏玩家需要y点属性值,请帮助游戏玩家计算有多少种计算方式。 输入描述 第一行:三个整数n,x,y * 第一个整数n(0 < n <20)表示宝石总数量。 * 第二个整数x(0<x <=n),表示可以选择宝石个数 * 第三个整数y,表示通过游戏需要的属性值 第二行:n个整数,a1,a2,…an(-100 < ai < 100)

By Ne0inhk
Python从0到100(九十六):ResNext 网络核心技术解析及UCI-HAR数据集实验分析

Python从0到100(九十六):ResNext 网络核心技术解析及UCI-HAR数据集实验分析

前言:零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学业升学和工作就业的先行者! 【优惠信息】 • 新专栏订阅前500名享9.9元优惠 • 订阅量破500后价格上涨至19.9元 • 订阅本专栏可免费加入粉丝福利群,享受: - 所有问题解答 -专属福利领取 欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程! 本文目录: * 一、分组卷积的基础原理 * 1. 传统卷积的瓶颈与挑战 * 2. 分组卷积的核心机制与数学表达 * 3. 分组卷积的技术优势 * 二、ResNext架构设计 * 1. 架构总览 * 2. 核心模块 * 2.1 基础单元 * 2.2 并行结构 * 2.3

By Ne0inhk