首页 > 编程语言 >【优选算法】Bit-Samurai:位运算的算法之道

【优选算法】Bit-Samurai:位运算的算法之道

时间:2025-01-07 13:30:36浏览次数:3  
标签:运算 nums int 异或 Samurai 算法 Bit include 进位

文章目录

本篇是优选算法之位运算算法,这是一种直接对整数在内存中的二进制位进行操作的运算,它的运算效率高,在快速幂算法汉明重量找出数组中唯一出现一次的数字不使用额外变量交换两个数

1.常见位运算总结

1.1 基础位运算符号

这六个位运算符是实现位运算算法的重要运算符,在C语言阶段有详细的介绍过

传送门:关于我、重生到500年前凭借C语言改变世界科技vlog.10——进制转化&&操作符进阶

在这里插入图片描述
记法如图所示,强调一下什么是无进位相加?

异或运算的规则决定了它天然契合无进位相加的概念
异或运算在比较两个二进制位时,0 ^ 0 = 0,0 ^ 1 = 1 ,1 ^ 0 = 1, 1 ^ 1 = 0
只是单纯对比两个数在每一位上的值,将不同的视为 1相同的视为 0不涉及向高位进位

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

在这里插入图片描述

约定二进制位从右到左,为最低位最高位,定义为从0到31,为的就是对应右移x位刚好对应第x位。所以将要比较的数 n 的第x位右移x位,与1按位与&,如果是0,第x位为0;如果是1,第x位是1

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

请添加图片描述

要修改数n第x位为1就不能破坏原来的数,所以将1移动x位与1按位或|,只修改了我们想要修改的那一位

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

请添加图片描述

要修改数n第x位为0就不能破坏原来的数,所以将1移动x位取反~为0与1按位与&,只修改了我们想要修改的那一位

1.5 位图的思想

在这里插入图片描述

位图其实和哈希表相似,哈希表是额外开辟一个空间,计算数据出现频次,而位图则是把数据存在数据类型一个个字节里,这就省去了多开一个空间,然后利用上述的方法修改为1或0,统计数是否出现过

1.6 提取一个 n 二进制表示中最右侧的 1

请添加图片描述

数n取反后+1得到相反数-n,然后两数按位与&得到最右侧的1。即最右侧的1及其右边都不变左边的数都变成0

1.7 干掉一个数 n 二进制表示中最右侧的 1

请添加图片描述

数n减1,然后两数按位与&干掉最右侧的1。即最右侧的1及其右边都变成0左边的数都不变

1.8 位运算的优先级

通常优先级为:~ > & > ^ > |
但是记起来太麻烦了,干脆直接加括号更好

1.9 异或运算符 ^ 的运算律

在这里插入图片描述

这是异或运算符^常用的运算律,在题目中经常用

2.判定字符是否唯一

✏️题目描述:

在这里插入图片描述

✏️示例:

在这里插入图片描述

传送门:判定字符是否唯一

题解:

通常统计多数的字母出现次数一般想到的是哈希表时间空间复杂度都为O(n),这就有人问了,有没有既简单又强势的方法能够解决?有的兄弟有的,这么强势的方法有九个,都是当前蓝桥杯T0.5的强势方法,因为本题只涉及26个小写英文字母,所以可以用减少开辟空间位图

在这里插入图片描述

如上述介绍位图一样,用10表示字母是否出现过如果为1,就返回false如果是0,就添加1到指定位数上,遍历完字符串后返回true

标签:运算,nums,int,异或,Samurai,算法,Bit,include,进位
From: https://blog.csdn.net/Zero_VPN/article/details/144873700

相关文章

  • 代码随想录算法训练营第二十八天-贪心算法-122. 买卖股票的最佳时机II
    有奇妙的解法分析要获得利润,就是当天卖出前一天买入的的利润,也就是当天价格减去前一天的价格通过这样的运算,可以得到一个新的序列,这个序列就是上一道53的最大子序和的应用了而且把这些子序和中所有正数值都加到一起就是最大利润了#include<iostream>#include<vector>c......
  • 双指针算法专题
    目录1.移动零1.1算法原理1.2算法代码 2.复写零2.1算法原理  2.2算法代码3.快乐数3.1算法原理3.2算法代码4.盛水最多的容器4.1算法原理 4.2算法代码5.有效三角形的个数5.1算法原理5.2算法代码6. 剑指offer:和为s的两个数(原)6.1算法......
  • 招行面试:RocketMQ、Kafka、RabbitMQ,如何选型?
    本文原文链接文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完......
  • 【复现】基于自适应遗传算法的分布式电源优化配置[IEEE33、IEEE118节点](Matlab代码实
     ......
  • #define int long long 必须写在#include<bits/stdc++.h>的下方
    #include<bits/stdc++.h>usingnamespacestd;intd2[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};intx,y,k,l;intvis[25][25];inta[25][25];boolcheck(intm,intn){ if(m<0||n<0||m>x+1||n>y+1) returnfalse; ret......
  • 排序算法模板--python版
    在刷算法题时,排序是一个非常常见的操作。Python提供了多种排序算法的实现方式,而在一些经典的算法题中,我们需要手动实现不同的排序算法以符合题目要求。以下是一些常见的排序算法模板,包含了冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序,这些算法的模板通常会在刷......
  • 关于app签名算法一些问题
    app签名算法相关问题如何修改签名算法1.为什么要修改签名算法?1.生成新的密钥库(KeyStore)和密钥(Key)2.修改签名算法(使用新的签名算法)3.确认签名算法是否生效4.兼容性和注意事项总结如何将SHA256中的1024位密钥改为2048位密钥步骤概览1.生成新的RSA2048位密......
  • Scalable Methods for 8-bit Training of Neural Networks
    目录概RangeBatchNormalization代码BannerR.,HubaraI.,HofferE.andSoudryD.Scalablemethodsfor8-bittrainingofneuralnetworks.NeurIPS,2018.概本文针对BatchNorm模块在低精度(8-bit)的情况下进行一个合适的改进.RangeBatchNormalization对于......
  • java毕业设计-基于springboot+vue的协同过滤推荐算法旅游信息管理平台设计和实现,基于
    博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • 欧拉回路算法
    网络上关于求欧拉回路的线性算法的资料普遍缺少证明。本文将通过分析欧拉回路的性质直接推导出这一算法。算法流程基本的定义可以参考Alex_Wei的博客,本文不再赘述。算法流程部分仅推导求无向图欧拉回路的算法,求有向图欧拉回路的算法的推导过程是类似的,更改一些对应术语即可。......