【刷题】位运算

消失的两个数字 

消失的两个数字

“单身狗”进阶版思路

class Solution {
public:vector<int> missingTwo(vector<int>& nums) {int ret = 0;int n = nums.size();for(int i = 0; i < n; i++){ret ^= (nums[i] ^ i);}ret ^= (n ^ (n + 1) ^ (n + 2));// 按位异或的规则是相异为1// 找出从最低位开始第一次出现 1 的位置,这个位置一定对应两个数字的二进制位是一个为0 ,一个为1int flag = 0;while(!((ret >> flag) & 1)) flag++;vector<int> v1;vector<int> v2;for(int i = 0; i < n; i++){if(((nums[i] >> flag) & 1) == 1) v1.push_back(nums[i]);else v2.push_back(nums[i]);}for(int i = 1; i < n + 3; i++){if(((i >> flag) & 1) == 1) v1.push_back(i);else v2.push_back(i);}// 对 v1 和 v2 分别操作vector<int> v3;int tar = 0;for(int i = 0; i < v1.size(); i++){tar ^= v1[i];}v3.push_back(tar);tar = 0;for(int i = 0; i < v2.size(); i++){tar ^= v2[i];}v3.push_back(tar);return v3;}
};

只出现一次的数字 II

只出现一次的数字 II

思路:将所有数字的每一位比特位相加,这些比特位的和有如下规律:

只需要定义一个整形变量,通过上述方法计算出它的每一个比特位即可! 

class Solution {
public:int singleNumber(vector<int>& nums) {int ret = 0; // 只出现一次的数字for(int i = 0; i < 32; i++){// 修改第 i 位的值// 将每个数的第 i 个比特位加起来int sum = 0;for(int j = 0; j < nums.size(); j++){sum += ((nums[j] >> i) & 1);}sum %= 3;ret |= (sum << i);} return ret;}
};

两整数之和 

两整数之和

class Solution {
public:int getSum(int a, int b) {// ^ 是无进位相加,只需要每次找到进的位,再相加,等到进位为 0 的时候,就结束了int sum = a ^ b;size_t carry = (size_t)((a & b) << 1); // carry 是进的位while(carry){a = sum, b = carry;sum = a ^ b;carry = size_t((a & b) << 1);}return sum;}
};

^ 异或运算是:两个数对应比特位相同为0,相异为1,也叫 不进位相加

只需要利用按位异或运算符进行不进位相加运算,然后每次加上它的进位即可!直到进位为0!

判断字符是否唯一

判定字符是否唯一

两种方法:哈希表和位图(位图是进阶方法)

哈希表

class Solution {
public:bool isUnique(string astr) {int a[26] = { 0 };for(int i = 0; i < astr.size(); i++){a[astr[i] - 'a'] ++ ;}for(int i = 0; i < 26; i++){if(a[i] > 1) return false;}return true;}
};

位图

和哈希表思路一样,但是将标记存在32个比特位中,利用位运算来控制比特位的值!

class Solution {
public:bool isUnique(string astr) {int n = astr.size();if(n > 26) return false;int bit_set = 0; // 一个位图整形for(int i = 0; i < n; i++){int a = bit_set >> (astr[i] - 'a'); // bit_set 移位后的数if((a & 1) == 0) {bit_set |= (1 << (astr[i] - 'a'));}else if((a & 1) == 1) return false;}return true;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2822165.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

94. 递归实现排列型枚举 刷题笔记

思路 依次枚举 每个位置用哪个数字 要求按照字典序最小来输出 而每次搜索下一层时i都是从1开始 也就是说 如果有小的数可以填上 那么该方案会填上这个数字 例如 当n等于3 第一次搜索 1 2 3输出后返回 返回后此时i3 第二个位置填3 1 3 2 输出后返回 此时返回到第一层…

如何用Python检查时间序列数据是否平稳?

时间序列数据通常以其时间性质为特征。这种时间性质为数据增加了趋势或季节性&#xff0c;使其与时间序列分析和预测兼容。如果时间序列数据不随时间变化或没有时间结构&#xff0c;则称其为静态数据。因此&#xff0c;检查数据是否平稳是非常必要的。在时间序列预测中&#xf…

基于粒子群优化算法的图象聚类识别matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于粒子群优化算法的图象聚类识别。通过PSO优化方法&#xff0c;将数字图片的特征进行聚类&#xff0c;从而识别出数字0~9. 2.测试软件版本以及运行结果展示 M…

智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛)

智能咖啡厅助手&#xff1a;人形机器人 融合大模型&#xff0c;行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛) “机器人大模型与具身智能挑战赛”的参赛作品。的目标是结合前沿的大模型技术和具身智能技术&#xff0c;开发能在模拟的咖啡厅场景中承担服务员角色并…

Flutter中的三棵树

Widget Tree&#xff1a; 页面配置信息。 Element Tree&#xff1a; Widget tree的实例化对象&#xff0c;创建出renderObject&#xff0c;并关联到element.renderobject属性上&#xff0c;最后完成RenderObject Tree的创建。 RenderObject Tree&#xff1a;完成布局和图层绘制…

自测-1 打印沙漏

文章预览&#xff1a; 题目算法代码 题目 算法 以前做过这个&#xff0c;那次是c语言写的&#xff0c;一点一点处理一层一层完成&#xff0c;这次我换了一种语言用了另一种思想使用递归去写&#xff0c;还是我们要先求出应该有多少层这个很容易&#xff0c;中间输出部分我们算…

STM32标准库——(14)I2C通信协议、MPU6050简介

1.I2C通信 I2C 通讯协议(Inter&#xff0d;Integrated Circuit)是由Phiilps公司开发的&#xff0c;由于它引脚少&#xff0c;硬件实现简单&#xff0c;可扩展性强&#xff0c; 不需要USART、CAN等通讯协议的外部收发设备&#xff0c;现在被广泛地使用在系统内多个集成电路(IC)间…

睡眠问题大揭秘:中医如何轻松解决?

睡眠问题是现代社会普遍存在的难题&#xff0c;它的影响不仅仅局限于个体的疲惫和神经紧张&#xff0c;更深远的是对整体健康的长期威胁。根据世界卫生组织的数据&#xff0c;全球约有三分之一的人口遭受着不同程度的睡眠问题&#xff0c;其中包括失眠、入睡困难、多梦、易醒等…

flutter旋转动画,Android彻底组件化方案实践方法

Android基础 & 常用 针对Android基础&常用知识&#xff0c;我认为对于初级开发者来说&#xff0c;按照优先级最主要的知识点主要包括&#xff1a;四大组件、布局使用、多线程 & 动画&#xff1b;具体介绍如下&#xff1a; 2. Android进阶 针对Android进阶知识&am…

幸运星数(爷再也不想用pow了)

解法&#xff1a; 暴力 #include <iostream> #include <vector> using namespace std; #define endl \nint main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int n;long long sum 0, a;cin >> n;for (int i 1; i < n; i) {a 1;for (in…

NVMe开发——PCIe复位

简介 PCIe中有4种复位机制&#xff0c;早期的3种被称为传统复位(Conventional Reset)。传统复位中的前2种又称为基本复位(Fundamental Resets)&#xff0c;分别为冷复位(Cold Reset)&#xff0c;暖复位(Warm Reset)。第3种复位为热复位(Hot Reset)。第4种复位被称为功能级复位…

队列的结构概念和实现

文章目录 一、队列的结构和概念二、队列的实现三、队列的实现函数四、队列的思维导图 一、队列的结构和概念 什么是队列&#xff1f; 队列就是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 如上图所示&#x…

面经 | Java创建线程的三种方式

利用JUC包创建线程的三种方式&#xff1a; 通过继承Thread类创建线程类实现Runnable接口创建线程类通过Callable和Future接口创建线程 继承Thread类创建线程 class Thread1 extends Thread {Overridepublic void run() {System.out.println("启动线程1");} }实现R…

Fastjson2 <== 2.0.26反序列漏洞

根据Y4TACKER师傅在2023-03-20发布了一篇关于Fastjson原生反序列化的文章&#xff0c;文章中引入注目的是利用条件限制条件&#xff0c;不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题&#xff0c;其实如果单独去使用一些关键词去搜索&a…

若依前后端分离版本-自动生成代码

听说若依挺好用的&#xff0c;所以来学习一下。 1.下载项目&#xff0c;配置redis,配置mysql,安装npm&#xff08;版本一定要低于16&#xff09; 2.执行sql脚本数据库相关信息 3.启动后端ruoyi-admin的ruoyiApplication 4启动前端 选择terminal 进入ruoyi-ui&#xff0c;执…

并查集基础,死去的回忆突然攻击我

并查集普及【模板】并查集 - 洛谷 #include<iostream> #include<cstring> #include<queue> #include<vector> #include<algorithm> using namespace std; #define int long long typedef pair<int,int> PII; #define xx first #define y…

Mathtype安装时word启动显示“文件未找到:MathPage.WLL”

背景 由于老板布置的临时工作&#xff0c;需要安装Mathtype&#xff0c;但尝试了3个不同的版本后&#xff08;每次都卸载干净了&#xff09;&#xff0c;均未能成功安装&#xff0c;出现的报错3个版本各不相同&#xff1a; ①解压安装过程中失败&#xff08;这个版本不再尝试…

“智慧代码阁”千聊知识店铺成立了

前两天我在千聊上注册了知识店铺“智慧代码阁” 欢迎大家来购买更加精品的代码 点击这里进入知识店铺 非常感谢大家&#xff01;&#xff01;&#xff01; 欢迎来到“智慧代码阁”——您的专属知识宝库&#xff0c;专注于为代码爱好者和专业人士提供前沿、实用、系统的编程知…

C++数据结构与算法——二叉搜索树的属性

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

Linux 系统安装/卸载 Nginx教程

优质博文&#xff1a;IT-BLOG-CN 一、安装Nginx 【1】首先通过Nginx官网确定需要安装的版本&#xff0c;如果Linux联网则直接在Linux服务上使用wget命令将Nginx安装包下载到/usr/local/目录下&#xff1a; [rootxxx local]# wget -c http://nginx.org/download/nginx-1.22.1.…