当前位置: 首页 > news >正文

【C++算法】位运算

位运算基础知识

 1.基础运算符

<< : 左移

>> : 右移

~   : 取反

&   : 按位与,有0就是0

 I   : 按位或,有1就是1

 ^   : 按位异或,(1)相同为0,相异为1(2)无进位相加

2.运算的优先级——>能假括号就加括号

3.给一个数n,确定它的二进制表示中的第x位是0还是1?

n :      0 1 1 0 1 0 1 0 0 1

下标:9 8 7 6 5 4 3 2 1 0

表达式:(n >> x) & 1

4.将一个数n的二进制表示的第x位修改成1

0 1 1 0 1 0 1 0 1 1

0 1 1 0 1 1 1 0 1 1 

表达式:n |= (1 << x)

5.将一个数n的二进制表示的第x位修改位0

0 1 1 0 1 0 1 0 1 1

0 1 1 0 1 0 0 0 1 1

按位与 & : 1 1 1 1 1 1 0 1 1 1

表达式:n &= (~(1<<x))

6.位图的思想

7.提取一个数(n)二进制表示中最右侧的1——>lowbit

0 1 1 1 0 1 0 1 0 0 0

0 0 0 0 0 0 0 1 0 0 0

表达式:n & -n

-n : 按位取反 + 1

-n的本质就是将最右侧的 1 左边的区域全部取反

8.干掉一个数(n)二进制表示中最右侧的1

0 1 1 0 1 0 1 0 0

0 1 1 0 1 0 0 0 0

表达式:n & (n-1)

n-1的本质就是将最右侧的1右边的值和自己取反

9.异或(^)运算符的特性

a ^ 0 = a

a ^ a = 0(消消乐)

a ^ b ^ c = a ^ (b ^ c)

 判断字符是否唯一

  • 题目链接

判断字符是否唯一icon-default.png?t=O83Ahttps://leetcode.cn/problems/is-unique-lcci/description/

  • 算法原理

  • 代码步骤

class Solution {
public:bool isUnique(string astr) {// 鸽巢原理if(astr.size() > 26) return false;int bigmap = 0;for(auto ch : astr){int i = ch - 'a';// 下标为i位置处是否出现过if((bigmap >> i) & 1){return false;}bigmap |= (1 << i);}return true;}
};

 丢失的数字

  • 题目链接

丢失的数字

  • 算法原理

  • 代码步骤

class Solution {
public:int missingNumber(vector<int>& nums) {int tmp = 0;int n = nums.size();for(auto x : nums){tmp ^= x;}for(int i = 0; i <= n; i++){tmp ^= i;}return tmp;}
};

 俩整数之和

  • 题目链接

俩整数之和icon-default.png?t=O83Ahttps://leetcode.cn/problems/sum-of-two-integers/description/

  • 算法原理

  • 代码步骤

class Solution {
public:int getSum(int a, int b) {while(b != 0){int x = a ^ b;int y = (a & b) << 1;a = x;b = y;}return a;}
};

 只出现一次的数字II

  • 题目链接

只出现一次的数字IIicon-default.png?t=O83Ahttps://leetcode.cn/problems/single-number-ii/description/

  • 算法原理

  • 代码步骤

class Solution {
public:int singleNumber(vector<int>& nums) {int ret = 0;for(int i = 0; i < 32; i++){int sum = 0;for(auto ch : nums){if((ch >> i) & 1 == 1) sum++;}if(sum % 3 == 1){ret |= 1 << i;}}return ret;}
};

消失的俩个数字

  • 题目链接

消失的俩个数字icon-default.png?t=O83Ahttps://leetcode.cn/problems/missing-two-lcci/

  • 算法原理

  • 代码步骤

class Solution {
public:vector<int> missingTwo(vector<int>& nums) {int n = nums.size();int tmp = 0;for(auto x : nums){tmp ^= x;}for(int i = 1; i <= n + 2; i++){tmp ^= i;}int diff = 0;while(1){if((tmp >> diff) & 1 == 1){break;}diff++;}int a = 0, b = 0;for(auto x : nums){if((x >> diff) & 1 == 1){a ^= x;}else{b ^= x;}}for(int i = 1; i <= n + 2; i++){if((i >> diff) & 1 == 1){a ^= i;}else{b ^= i;}}return {a, b};}
};

 找单身狗

  • 题目链接

  • 算法原理

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。

例如:
有数组的元素是:1,2,3,4,5,1,2,3,4,6
只有5和6只出现1次,要找出5和6.

  • 代码步骤

//单身狗2
#include<stdio.h>
void Find(int arr[], int sz, int* single_dog)
{//找到数组中不同数字二进制位的不同处//若某个二进制位有不同,则异或之后为1int i = 0;int ret = 0;for (i = 0; i < sz; i++){ret ^= arr[i];}//在32位二进制位上找到异或之后为1的地方,找到一处即可int pos = 0;for (i = 0; i < 32; i++){if (((ret >> i) & 1) == 1){break;}else{++pos;}}//将数组中二进制位在此处的为1或0的分开//分开后将二进制位在此处的为1的全部异或//将二进制位在此处的为0的全部异或for (i = 0; i < sz; i++){if (((arr[i] >> pos) & 1) == 1){single_dog[0] ^= arr[i];}else{single_dog[1] ^= arr[i];}}
}int main(void)
{int arr[] = { 1,2,3,4,5,1,2,3,4,6 };int sz = sizeof(arr) / sizeof(arr[0]);int single_dog[2] = { 0 };Find(arr, sz,single_dog);printf("%d %d", single_dog[0], single_dog[1]);return 0;
}

相关文章:

【C++算法】位运算

位运算基础知识 1.基础运算符 << : 左移 >> : 右移 ~ : 取反 & : 按位与&#xff0c;有0就是0 I : 按位或&#xff0c;有1就是1 ^ : 按位异或&#xff0c;&#xff08;1&#xff09;相同为0&#xff0c;相异为1&#xff08;2&#xff09;无进位相加 2.…...

PMP--一模--解题--101-110

文章目录 11.风险管理--过程--识别风险→实施定性风险分析→实施定量风险分析→规划风险应对→实施风险应对→监督风险101、 [单选] 在项目即将进入收尾阶段时&#xff0c;项目经理发现了一项原来没有考虑到的新风险。该风险一旦发生&#xff0c;可能给最终的可交付成果带来重要…...

为了有了ReentrantLock还需要ReentrantReadWriteLock?

ReentrantLock 和 ReentrantReadWriteLock 是 Java 中的两种不同实现的锁&#xff0c;它们各自适用于不同的应用场景。以下是为什么需要 ReentrantReadWriteLock 的几个原因&#xff1a; 1. 读写分离 ReentrantLock 是一种独占锁&#xff0c;适用于任何线程操作共享资源的场景…...

Vite打包zip并改名为md5sum哈希案例

通常在DevOps CICD流水线部署前端项目时&#xff0c;一般默认都要将dist资源打包为zip&#xff0c;并且把zip名称改为md5sum哈希值(用于文件完整性验证)。 md5sum是什么&#xff1f; md5sum 是一个在 Unix 和类 Unix 系统&#xff08;如 Linux&#xff09;中广泛使用的命令行…...

并行编程实战——TBB中节点的数据结构

一、节点的定义 在前面分析过了节点相关的应用和功能&#xff0c;也在其中分析过一些节点的数据定义情况。本文就对节点的数据定义进行一个更详细具体的分析说明&#xff0c;特别是对一些应用上的细节展开说明一下。知其然&#xff0c;然后知其所以然。 节点的定义&#xff0c…...

ClickHouse总结

背景 OLAP&#xff08;联机分析处理&#xff09; 是一种用于在大规模数据集上进行复杂分析的数据处理方法。与OLTP&#xff08;联机事务处理&#xff09;系统专注于支持日常业务交易和操作不同&#xff0c;OLAP系统旨在提供对多维数据的快速、灵活的查询和分析能力。 OLAP场景…...

Guava中Preconditions校验

Guava中Preconditions校验 场景引入Guava 参数校验 Preconditionspom 依赖引入常用的方法 场景引入 提出疑问&#xff1f;为什么不直接使用 jsr330校验注解对实体类进行校验呢&#xff1f; 答&#xff1a;不同的场景&#xff0c;如短信码验证登录&#xff0c;账号密码登录此类…...

容器技术--Docker常用命令

Docker常用命令 镜像的命令 # 查看本地所有镜像 docker images # 向服务端发送请求,服务端处理 # 只获取镜像id docker images -q # 镜像管理 docker image# 查看镜像的详细信息 docker image inspect 镜像id # 查看 容器整体信息 docker info | grep -iE...

【Linux】网络层协议——IP

一、IP协议 在前面&#xff0c;我们学习了应用层和传输层&#xff0c;接下来&#xff0c;我们来学习网络层&#xff0c;网络层的主要功能是在复杂的网络环境中确定一个合适的路由。 1.1 IP协议的基本概念 主机&#xff1a;配有IP地址&#xff0c;有可以进行路由控制的设备路由…...

【Echarts】vue3打开echarts的正确方式

ECharts 是一个功能强大、灵活易用的数据可视化工具&#xff0c;适用于商业报表、数据分析、科研教育等多种场景。那么该如何优雅的使用Echarts呢? 这里以vue3为例。 安装echarts pnpm i echarts封装公用方法 // ts-nocheck import * as echarts from echarts; // 我们这里借…...

一些学习three的小记录

这篇主要用来记录我学习3d渲染相关的疑问记录,后续会持续的更新,如果我的理解不对欢迎评论区更正。 目录 1.WebGLRenderer和WebGPURenderer的区别 1.1 WebGLRenderer 1.2 WebGPURenderer 二、scene.background和renderer.setClearColor有什么区别 三、renderer.setAnimat…...

Porcupine - 语音关键词唤醒引擎

文章目录 一、关于 Porcupine特点用例尝试一下 语言支持性能 二、Demo1、Python Demo2、iOS DemoBackgroundService DemoForegroundApp Demo 3、网页 Demo3.1 Vanilla JavaScript 和 HTML3.2 Vue Demos 三、SDK - Python 一、关于 Porcupine Porcupine 是一个高度准确和轻量级…...

Golang | Leetcode Golang题解之第409题最长回文串

题目&#xff1a; 题解&#xff1a; func longestPalindrome(s string) int {mp : map[byte]int{}for i : 0; i < len(s); i {mp[s[i]]}res : 0for _, v : range mp {if v&1 1 {res v - 1} else {res v}}if res<len(s) {res}return res }...

【C++】STL数据结构最全函数详解2-向量vector

关于STL&#xff0c;我们之前浅浅提过&#xff1a;这里 另外对于栈&#xff0c;这里有更加详尽的介绍&#xff1a;CSTL常用数据结构1详解---栈&#xff08;stack&#xff09;-CSDN博客 这个系列将会更加深入地从函数原型开始用详细的例子解释用法 首先这一篇介绍的是一个非常…...

阿里云 Quick BI使用介绍

Quick BI使用介绍 文章目录 阿里云 Quick BI使用介绍1. 创建自己的quick bi服务器2. 新建数据源3. 上传文件和 使用4. 开始分析 -选仪表盘5. 提供的图表6. 一个图表的设置使用小结 阿里云 Quick BI使用介绍 Quick BI是一款全场景数据消费式的BI平台&#xff0c;秉承全场景消费…...

LLMs之SuperPrompt:SuperPrompt的简介、使用方法、案例应用之详细攻略

LLMs之SuperPrompt&#xff1a;SuperPrompt的简介、使用方法、案例应用之详细攻略 目录 SuperPrompt的简介 SuperPrompt的使用方法 1、prompt SuperPrompt的案例应用 SuperPrompt的简介 SuperPrompt项目是一个开源项目&#xff0c;旨在通过设计特定的提示词来帮助我们更好…...

Java中的Web服务开发:RESTful API的最佳实践

Java中的Web服务开发&#xff1a;RESTful API的最佳实践 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代Web应用开发中&#xff0c;RESTful API是构建可伸缩、易于维护的Web服务的关键。…...

Linux创建虚拟磁盘并分区格式化

快速创建一个虚拟磁盘 你可以通过以下步骤在Linux上虚拟一个磁盘&#xff0c;并将其挂载到 /mnt/ 目录下&#xff1a; 步骤 1: 创建一个虚拟磁盘文件 使用 dd 命令创建一个虚拟磁盘文件&#xff08;例如大小为1GB&#xff09;&#xff1a; dd if/dev/zero of/root/virtual_…...

面试经典150题——最后一个单词的长度

目录 题目链接&#xff1a;58. 最后一个单词的长度 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;反向遍历 Java写法&#xff1a; C写法&#xff1a; 解法二&#xff1a;逆天解法 思路 存在的问题 总结 题目链接&…...

【C++】入门基础(上)

Hi&#xff0c;好久不见&#xff01; 目录 1、C入门小基础 1.1 祖师爷--Bjarne Stroustrup&#xff08;本贾尼斯特劳斯特卢普&#xff09; 1.2 C参考文献 1.3 书籍推荐 2、C的第一个程序 3、命名空间 3.1 namespace的价值 3.2 namespace的定义 3.3 命名空间的使…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...