【优选算法】--- 位运算

位运算

  • 一、常见的位运算总结(重点!)
    • 1、关于位运算的符号
    • 2、(判断)给一个数字n,确定它的二进制表示中的第X位,是1还是0?
    • 3、(修改)如何把一个二进制的数字的第x位修改为1?
    • 4、(修改)如何将一个数的二进制的第x位修改为0?
    • 5、(lowbit)提取二进制中最右侧的1
    • 6、去除二进制中最右侧的1
    • 7、位运算的优先级?能加() 就加()
    • 8、异或(^)的运算规律
  • 二、判定字符是否唯一
    • 1、题目解析
    • 2、算法原理
    • 3、代码
  • 三、丢失的数字
    • 1、题目解析
    • 2、算法原理
    • 3、代码
  • 四、两整数之和
    • 1、题目解析
    • 2、算法原理
    • 3、代码
  • 五、只出现一次的数字||
    • 1、题目解析
    • 2、算法原理
    • 3、代码
  • 六、消失的两个数字
    • 1、题目解析
    • 2、算法原理
    • 3、代码

一、常见的位运算总结(重点!)

1、关于位运算的符号

在这里插入图片描述

2、(判断)给一个数字n,确定它的二进制表示中的第X位,是1还是0?

在这里插入图片描述
方法:(n>>x)&1

3、(修改)如何把一个二进制的数字的第x位修改为1?

在这里插入图片描述

方法:n|=(1<<x)

4、(修改)如何将一个数的二进制的第x位修改为0?

在这里插入图片描述
方法:n&= (~(1<<x))

5、(lowbit)提取二进制中最右侧的1

在这里插入图片描述
方法:n&(-n)

6、去除二进制中最右侧的1

在这里插入图片描述
方法:n&(n-1)

7、位运算的优先级?能加() 就加()

8、异或(^)的运算规律

1. a^0=a
2. a^a=0
3. a^b ^ c=a^ (b^c)交换律

二、判定字符是否唯一

1、题目解析

在这里插入图片描述

2、算法原理

在这里插入图片描述

3、代码

class Solution 
{
public:bool isUnique(string astr) {// 利用鸽巢原理,如果给的字符串数量大于26,必有重复if(astr.size()>26) return false;int bitmap=0;// 就是刚开始默认32个0for(auto ch:astr){// 把每个字符转化为他的ASC||码值int i=ch-'a';// 先判断该位置是否已经存在(1:存在,0:不存在)if((bitmap>>i)&1==1) return false;// 此时就可以 把第一次出现的进入,位置标为1bitmap|=1<<i;}return true;}
};

三、丢失的数字

1、题目解析

在这里插入图片描述

2、算法原理

利用按位异或的规律:
①:a^ 0=a
②:a^ a=0

实际上就是:单身狗问题!

3、代码

class Solution 
{
public:int missingNumber(vector<int>& nums) {int ret=0;// 先把所给的数组 里面的数据异或(^)在一起for(auto n:nums) ret^=n;// 这里的ret保留了之前异或的,再把标准数组异或一下,就相当于所有都异或在一起了for(int i=0;i<nums.size()+1;i++) ret^=i; return ret;}
};

四、两整数之和

1、题目解析

在这里插入图片描述

2、算法原理

在这里插入图片描述

3、代码

class Solution {
public:int getSum(int a, int b) {while(b!=0){int x=a^b;// 先计算出无进位 相加的结果unsigned int y= (unsigned int) (a&b)<<1;// 算出进位a=x;b=y;// 重复上面的步骤}return a;}
};

五、只出现一次的数字||

1、题目解析

在这里插入图片描述

2、算法原理

在这里插入图片描述

3、代码

class Solution 
{
public:int singleNumber(vector<int>& nums) {int ret=0;for(int i=0;i<32;i++){int sum=0;for(auto x:nums){if((x>>i)&1==1) sum++;}if(sum%3==1)ret|=1<<i;// 把第i位修改为1}return ret;}
};

六、消失的两个数字

1、题目解析

在这里插入图片描述

2、算法原理

在这里插入图片描述

3、代码

class Solution 
{
public:vector<int> missingTwo(vector<int>& nums) {// 假设a,b是消失的数字// 1、将所有的数异或到一起int tmp=0;for(int  x:nums){tmp^=x;}for(int i=1;i<=nums.size()+2;i++){tmp^=i;}// 此时的tmp就是a^b// 2、找出a、b比特位不同的那一位int diff=0;// 标记比特位不同的几个位置for(int i=0;i<32;i++){if((tmp>>i)&1==1)break;elsediff++;}// 3、根据diff位的不同,对[1~N]、nums分类异或int a=0,b=0;// b存放比特位为1,a存放0for(int i=1;i<=nums.size()+2;i++){if((i>>diff)&1==1) b^=i;else a^=i;}for(int x:nums){if((x>>diff)&1==1) b^=x;else a^=x;}return {a,b};}
};

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机、大数据与人工智能国际学术会议

第五届计算机、大数据与人工智能国际会议由景德镇陶瓷大学主办&#xff0c;西安交通大学、暨南大学、南京邮电大学、长沙学院、景德镇学院、爱迩思出版社&#xff08;ELSP&#xff09;协办。会议于2024年11月1日~3日在江西景德镇举行。在本次会议上发表的文章将出版到会议论文集…

目标检测实战教程Day1(原创)

原创不易&#xff0c;转载请标明本文地址 目标检测一直是计算机视觉领域的核心问题之一&#xff0c;它就像是让计算机拥有了一双“鹰眼”&#xff0c;能在复杂的图像中迅速锁定和识别出各种有趣的目标&#xff0c;比如人、汽车、动物或者任何其他特定物体。在这一章&#xff0c…

NeuVector部署、使用与原理分析

文章目录 前言1、概述2、安装与使用2.1、安装方法2.1.1、部署NeuVector前的准备工作2.1.1.1 扩容系统交换空间2.1.1.2 Kubernetes单机部署2.1.1.2.1 部署Docker2.1.1.2.2 部署Kubectl2.1.1.2.3 部署Minikube 2.1.1.3 Helm部署 2.1.2、使用Helm部署NeuVector 2.2、使用方法2.2.1…

跟《经济学人》学英文:2024年09月28日这期 The curse of the Michelin star

The curse of the Michelin star Restaurants awarded the honour are more likely to close, research finds 原文&#xff1a; The twelve new restaurants added to the New York Michelin Guide this month, serving up cuisine ranging from “haute French” to “eco…

【springboot9735】基于springboot+vue的车辆充电桩

主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路&#xff0c;关注作者有好处 项目描述 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;车辆充电桩…

LabVIEW交直流接触器动态检测系统

LabVIEW软件与霍尔传感器技术结合的交直流接触器动态检测系统通过实时数据采集和处理技术&#xff0c;有效地测量并分析交直流接触器在吸合及吸持阶段的电流和电压变化&#xff0c;以及相应的功率消耗&#xff0c;从而优化电力和配电系统的性能和可靠性。 项目背景 交直流接触…

【Linux:线程控制】

目录 线程的创建与等待&#xff1a; ​编辑 代码中tid是什么&#xff1f; 如何看待线程函数传参&#xff1f; ​编辑 ​编辑创建多线程&#xff1a;​编辑 终止多线程&#xff1a; 线程分离&#xff1a; 线程封装&#xff1a; 线程的创建与等待&#xff1a; void *thre…

在docker中安装并运行mysql8.0.31

第一步&#xff1a;命令行拉取mysql镜像 docker pull mysql:8.0.31查看是否拉取成功 docker images mysql:latest第二步&#xff1a;运行mysql镜像&#xff0c;启动mysql实例 docker run -p 3307:3307 -e MYSQL_ROOT_PASSWORD"123456" -d mysql:8.0.313307:3307前…

51单片机的智能水温控制系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器继电器LED和按键等模块构成。适用于智能热水器控制、泳池水温控制系统等相似项目。 可实现功能: 1、LCD1602实时显示水温信息和上下限 2、温度传感器DS18B20采集水体温度 3、当温度低于下限&#xff0…

Linux环境通过APT 仓库安装版PostgreSQL 数据库实战

Linux环境通过APT 仓库安装版PostgreSQL 数据库是运维人员常见的需求之一&#xff0c;今天我们一步一步演示一下&#xff1a; 1、添加 PostgreSQL APT 仓库 确保你的系统更新&#xff0c;然后添加 PostgreSQL 的官方 APT 仓库。 sudo apt update sudo apt install -y wget w…

基于MindSpore实现CycleGAN壁画修复

基于MindSpore实现CycleGAN壁画修复_哔哩哔哩_bilibili 本案例运行需要较大内存&#xff0c;建议在Ascend/GPU上运行。 模型介绍 模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络&#xff0c;来自论文 Unpaired Image-to-Image Translation us…

大模型日报|7 篇必读的大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.上交大团队新研究&#xff1a;像专家一样大规模提升预训练数据质量 大语言模型&#xff08;LLM&#xff09;的预训练历来依赖于人类专家为提高语料库质量而精心设计的启发式方法&#xff0c;迄今为止已开发出大量规…

SpringSession;基于Redis的SpringSession实现;实现session共享的三种方式

一&#xff0c;SpringSession简介 是SpringCloud下管理session的框架&#xff0c;在微服务架构中&#xff0c;由于应用了分布式的思想&#xff0c;session无法做到内存中互通&#xff0c;需要一个框架来实现各个微服务中session数据共享&#xff0c;SpringSession解决了这个问题…

城市交通场景分割系统源码&数据集分享

城市交通场景分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-Faster&#xff06;yolov8-seg-GhostHGNetV2等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…

信创一定要了解的知识

什么是信创 定义 信创&#xff0c;全称为信息技术应用创新产业&#xff0c;旨在发展国产信息产业&#xff0c;减少对国外技术的依赖&#xff0c;实现软硬件的国产替代化。信创产业是数字经济的关键支撑&#xff0c;涵盖从基础硬件到应用软件的全产业链。 产业范畴 信创产业…

C0015.Clion中开发C++时,连接Mysql数据库方法

安装mysql数据库 CMakeLists.txt中配置mysql数据库 # 先指定mysql数据库的安装位置 include_directories("C:/Program Files/MySQL/MySQL Server 8.0/include") link_directories("C:/Program Files/MySQL/MySQL Server 8.0/lib") link_libraries(libmysq…

AI会计师——让AI+成就价值财务

摘要&#xff1a;用友携手CCTV-10联合策划《AI会计师》专题节目 目录 Part1 数智化凭证采集 Part2 智能月结 Part3 税务风险管控 Part1 数智化凭证采集 AI会计师&#xff0c;源自对大数据、人工智能、云计算等前沿技术的深度融合。它不仅仅是一款软件&#xff0c;更是企业智能…

Python基础之List列表用法

1、创建列表 names ["张三","李四","王五","Mary"] 2、列表分片 names[1]&#xff1a;获取数组的第2个元素。 names[1:3]&#xff1a;获取数组的第2、第3个元素。包含左侧&#xff0c;不包含右侧。 names[:3]等同于names[0:3]&…

大模型推理框架llama.cpp开发流程和常用函数介绍

llama.cpp是一个高性能的CPU/GPU大语言模型推理框架&#xff0c;适用于消费级设备或边缘设备。开发者可以通过工具将各类开源大语言模型转换并量化成gguf格式的文件&#xff0c;然后通过llama.cpp实现本地推理。经过我的调研&#xff0c;相比较其它大模型落地方案&#xff0c;中…

AI时代的直播革命!洞察数字化趋势,从今日开启你的AIGC旅程!

AI时代的直播革命&#xff01;洞察数字化趋势&#xff0c;从今日开启你的AIGC旅程&#xff01; 在AI技术日新月异的今天&#xff0c;直播行业正经历着一场前所未有的革命。这场革命不仅深刻改变了内容创作、传播与消费的方式&#xff0c;更预示着未来数字化时代娱乐与商业互动的…