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

位运算相关

文章目录

    • 一、求1的个数
    • 二、另类加法
    • 三、数组中出现一次的数字
    • 四、数组中出现一次的数字变形

一、求1的个数

二进制中1的个数
法一:逐位判断

根据与&运算 n&1=0,说明n的最右边一位为0 n&1=1,说明n的最右边一位为1
所以思路就是,将n右移再与1按位与

class Solution {
public:int hammingWeight(uint32_t n) {int count=0;while(n){if((n&1)==1) count++;n=n>>1;}return count;}
};

时间复杂度:O(logn)
逐位判断需循环log2n次,其中log2n代表数字n最高位1的所在位数(例如log2 4 = 2,log2 16 = 4)
右移一位的操作相当于除2
空间复杂度:O(1)

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

class Solution {
public:int hammingWeight(uint32_t n) {int count=0;while(n){n=n&n-1;count++;}return count;}
};

时间复杂度:O(m) m为二进制中1的个数
空间复杂度:O(1)

二、另类加法

不用加减号的加法
与:同时为1,才为1
异或:相同为0,相异为1
在这里插入图片描述

class Solution {
public:int add(int a, int b) {
//因为不允许用+号,所以求出异或部分和进位部分依然不能用+ 号,所以只能循环到没有进位为止        while(b!=0){
//保存进位值,下次循环用int c=(unsigned int)(a&b)<<1;//C++中负数不支持左移位,因为结果是不定的
//保存不进位值,下次循环用,a^=b;
//如果还有进位,再循环,如果没有,则直接输出没有进位部分即可。b=c;   }return a;}
};
/*
把a+b转换成非进位和+进位,由于不能用加法,因此要一直转换直到第二个加数变成0。 
用递归的写法比循环更容易一下子看懂
*/
class Solution {public int add(int a, int b) {if (b == 0) {return a;}// 转换成非进位和 + 进位return add(a ^ b, (a & b) << 1);}
};

三、数组中出现一次的数字

传送门

class Solution {
public:vector<int> singleNumbers(vector<int>& nums) {int res=0;//相同取0,相异取1,因此0^0=0,0^1=1,0异或任何数都为本身,可理解为没影响for (int n: nums) {res ^=n;//假设两个只出现一次的数分别为a和b,获得a异或b的结果}//找到ab第一个不相同的二进制位,用位与&操作(两个都为1才为1,其余为0,因此可理解0和任何数相与都还是本身)//理解:位与,就是0可以掩盖掉所有数字,0遇0为0,遇1还为0(子网掩码)//通过1的位置变化找出首个不一样的二进制位int m=1;while((m&res)==0){//m=000001,当第一位不是1时,结果为0,则m左移一位,000010类推直到找出m<<=1;}//找到m以后,用m划分数组,两个相同的数字,在m位一定相同,即其与m位与的结果一定是相同的,因此按m&n==0划分,就一定能保证://(1)原来相同的元素还在一组//(2)不同的两个元素被分到了不同组int a=0,b=0;for (int n:nums) {if ((n&m)==0) a^=n;else b^=n;}return {a,b};}
};

四、数组中出现一次的数字变形

传送门
法一:哈西最简单的方法

class Solution {
public:int singleNumber(vector<int>& nums) {map<int,int> m;for(auto e: nums){m[e]++;}for(auto e: m){if(e.second==1) return e.first;}return 0;}
};

法二:位运算

 7 : 0B0111 7 : 0B01117 : 0B0111^^^|||出现数  333 // 从上向下,可以发现[3个7]每位都出次了 3 次那这样时再增加一个数。7 : 0B0111 7 : 0B01117 : 0B01114 : 0B0100^^^|||出现数  433 // 从上向下,只有第 3位bit 出现了 4次%%%333 // 接下来,把现各个位出现的次数,按 3取余‖‖‖100 // 取余结果刚好100对应的就是4
class Solution {
public:int singleNumber(vector<int>& nums) {int res = 0;for (int i = 0, sub = 0; i < 32; ++i, sub = 0) {for (auto &n : nums) sub += ((n >> i) & 1);if (sub % 3) res |= (1 << i);}return res;}
};

相关文章:

位运算相关

文章目录一、求1的个数二、另类加法三、数组中出现一次的数字四、数组中出现一次的数字变形一、求1的个数 二进制中1的个数 法一&#xff1a;逐位判断 根据与&运算 n&10&#xff0c;说明n的最右边一位为0 n&11&#xff0c;说明n的最右边一位为1 所以思路就是&…...

Linux进程信号(产生、保存、处理)/可重入函数概念/volatile理解/SIGCHLD信号

首先区分一下Linux信号跟进程间通信中的信号量&#xff0c;它们的关系就犹如老婆跟老婆饼一样&#xff0c;没有一毛钱的关系。 信号的概念 信号的概念&#xff1a;信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断。比如&#xff1a;红绿灯是一种信号&#xff0c…...

锯齿数组 - 贪心

文章目录锯齿数组 -贪心&#xff08;不过挺像滑动窗口的&#xff09;1144. 递减元素使数组呈锯齿状锯齿数组 -贪心&#xff08;不过挺像滑动窗口的&#xff09; 1144. 递减元素使数组呈锯齿状 题目链接&#xff1a;1144. 递减元素使数组呈锯齿状 题目大意&#xff1a;给你一个…...

[CVPR 2022] Balanced Contrastive Learning for Long-Tailed Visual Recognition

Contents IntroductionMethodPreliminariesBalanced Contrastive Learning (BCL)Drawbacks of SCLClass-averagingClass-complementLower bound of BCLOptimization with Logit CompensationFrameworkExperimentReferencesIntroduction 作者发现对于在长尾数据集上,Supervised…...

23种设计模式-工厂模式

工厂模式是一种创建型设计模式&#xff0c;它提供了一种创建对象的方式&#xff0c;而无需将具体的对象创建逻辑暴露给客户端。在Java中&#xff0c;工厂模式常常用于创建复杂对象或对象的构造过程涉及到多个步骤的情况。 在Android开发中&#xff0c;工厂模式也经常被使用&am…...

Linux操作系统学习(进程等待)

文章目录进程等待进程等待的必要性如何进程等待waiwaitpid验证进程等待 ​ 我们知道fork函数可以创建一个子进程&#xff0c;而子进程通常是替父进程完成一些任务&#xff0c;而父进程在fork之后需要通过wait/waitpid等待子进程退出。这就是进程等待 进程等待的必要性 通过获…...

Docker学习(十八)load 和 import 命令的区别

Docker 中有两个命令可以将本地文件系统中的 tar 文件导入到 Docker 中&#xff1a;docker load 和 docker import。尽管它们的作用类似&#xff0c;但它们之间有一些重要的区别。 1.使用方式的不同&#xff1a; docker load 的使用示例&#xff1a; docker load --input tes…...

mysql中的事务

在日常生活中,我们会遇到一个场景,那就是在转账的时候,A有1000块钱,要给B转账500,那么最后的结果是A有500,B有500,但是也有可能出现A没有钱了,B有1000块,或者在转账过程中卡顿,这是不符合逻辑的,那么这个时候就要使用事务来解决问题 事务就是把一堆sql语句打包成一个整体,要么…...

《C++ Primer Plus》第18章:探讨 C++ 新标准(9)

编程练习 下面是一个简短程序的一部分&#xff1a; int main() {using namespace std;// list of double deduced from list contentsauto q average_list ({15.4, 10.7, 9.0});cout << q << endl;// list of int deduced from list contentscout << averag…...

记录一次PWM信号异常问题

问题我使用单片机输出PWM控制机械臂&#xff0c;但是控制过程中&#xff0c;机械臂总是会出现莫名的抽动。利用示波器测试PWM信号&#xff0c;发现信号正常。过程&#xff08;1&#xff09;在反复的测试过程中&#xff0c;队友提出&#xff0c;将示波器的地线放在左侧的GND波形…...

简单了解---性能测试

目录 一、什么是性能测试 二、常见的性能测试指标 1、并发 2、响应时间 3、事务 4、点击率 5、吞吐量 6、资源利用率 三、性能测试的分类 1、一般测试 2、负载测试 3、压力测试 4、稳定性测试 四、为什么要做性能测试&#xff1f; 五、影响性能的因素有哪些&…...

1.机器学习笔记第一周

机器学习利用领域&#xff1a; 1&#xff1a;随着网络数据增大&#xff0c;需要搜集用户的数据&#xff0c;做喜好性偏向判断等。 2&#xff1a;只要有数据的&#xff0c;无论是医疗领域&#xff0c;还是基因领域都是需要机器学习来发现数据密码。 3&#xff1a;机器自我学习…...

若依学习(前后端分离版)——启动时发生了啥?(@PostConstruct)(mybatis log free)

我们可以发现若依启动时执行了一些sql我们可以安装一个插件mybatis log free 来更好的进行sql查看 &#xff0c;安装后需要修改一下若依的日志配置如下查看日志&#xff0c;我们发现执行了三个方法&#xff08;&#xff09;&#xff0c;分别查询了一些数据。以第二个方法为例子…...

每日十问9c++-内存模型和名称空间

每日十问9c内存模型和名称空间 1.对于下面的情况&#xff0c;应使用哪种存储方案? a.homer 是函数的形参。 b. secret变量由两个文件共享。 c.topsecret 变量由一个文件中的所有函数共享&#xff0c;但对于其他文件来说是隐藏的。 d. beencalled 记录包含它的函数被调用的次数…...

【python】JSON数据类型与Python数据类型之间的转化

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录JSON格式文件JSON格式序列化与反序列化作用JSON常用数据结构键值对的集合值的有序列表JSON数据类型与Python数据类型之间的转化JSON格式和python的区别读写json文件dump 把python 写到json文件load 把json写…...

Spring——什么是事务?传播行为?事务隔离级别有哪些?

思维导图一、什么是事务&#xff1f;多条DML要么同时成功&#xff0c;要么同时失败Transaction&#xff08;tx&#xff09;二、事务的四个过程&#xff1a;开启事务&#xff08;start transaction&#xff09;执行核心业务代码提交事务&#xff08;如果核心业务处理过程中没有出…...

【项目实战】使用Feign服务间相互调用,其实OpenFeign也没有想象中那么难嘛

一、Feign介绍 openfeign是一个java的http客户端,用来简化http调用 二、Feign架构(来自官方) Feign由五大部分组成, 由于刚开始接触 feign ,比较关注的 clients 跟 encoders/decoders 三、OKHTTP与Feign之间的关系 在Feign中,Client是一个非常重要的组件,Feign最终…...

tun驱动之ioctl

struct ifreq ifr; ifr.ifr_flags | IFF_TAP | IFF_NO_PI; ioctl(fd, TUNSETIFF, (void *)&ifr); 上面的代码的意思是设置网卡信息&#xff0c;并将tun驱动设置为TAP模式。在TAP模式下&#xff0c;在用户空间下调用open打开/dev/net/tun驱动文件&#xff0c;发送(调用send函…...

[acwing周赛复盘] 第 93 场周赛20230304

[acwing周赛复盘] 第 93 场周赛20230304 一、本周周赛总结二、 4867. 整除数1. 题目描述2. 思路分析3. 代码实现三、 4868. 数字替换1. 题目描述2. 思路分析3. 代码实现四、4869. 异或值1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 彩笔了&#xff0c;只A…...

NOIP2022 T4 比赛

P8868 [NOIP2022] 比赛 题目大意 有两个长度为nnn的序列aaa和bbb&#xff0c;有qqq次询问&#xff0c;每次询问给出l,rl,rl,r&#xff0c;求 ∑ilr∑ji1r(max⁡kijak)(max⁡lijbl)\sum\limits_{il}^r\sum\limits_{ji1}^r(\max\limits_{ki}^ja_k)\times(\max\limits_{li}^jb_l…...

CTF逆向实战:从RC4到Base64,手把手拆解CTFshow赛题

1. RC4加密实战&#xff1a;从文件分析到密钥破解 第一次接触CTF逆向题时&#xff0c;看到RC4加密可能会觉得无从下手。但实际拆解后你会发现&#xff0c;这类题目往往藏着明显的突破口。就拿CTFshow这道re2赛题来说&#xff0c;整个解题过程就像在玩解谜游戏。 用IDA打开题目…...

从内核事件到业务洞察:手把手教你用sysdig + Lua脚本定制专属监控看板

从内核事件到业务洞察&#xff1a;用sysdig与Lua脚本构建定制化监控体系 当你的微服务集群每天处理数十亿次API调用时&#xff0c;标准监控指标如CPU使用率或内存消耗早已无法满足需求。真正的挑战在于&#xff1a;当某个关键业务接口的99线突然飙升时&#xff0c;如何快速定位…...

西门子S7-300 PLC实战:从零搭建药品装瓶机控制系统(附组态王6.55配置)

西门子S7-300 PLC实战&#xff1a;从零搭建药品装瓶机控制系统&#xff08;附组态王6.55配置&#xff09; 在制药生产线上&#xff0c;药品装瓶环节的效率直接影响整体产能。传统人工装瓶方式不仅速度慢&#xff0c;还容易产生计数误差。而采用PLC控制的自动化装瓶系统&#x…...

比特币钱包密码与助记词恢复工具:从入门到精通

比特币钱包密码与助记词恢复工具&#xff1a;从入门到精通 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assistance in trying different…...

AMD Ryzen硬件调试终极指南:3大突破性能优化秘籍揭秘

AMD Ryzen硬件调试终极指南&#xff1a;3大突破性能优化秘籍揭秘 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://git…...

突破内容壁垒:5大核心优势解锁知识自由

突破内容壁垒&#xff1a;5大核心优势解锁知识自由 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代&#xff0c;付费墙已成为获取优质内容的主要障碍。无论是学术…...

洛雪音乐音源修复实战指南:从零开始的插件化解决方案

洛雪音乐音源修复实战指南&#xff1a;从零开始的插件化解决方案 【免费下载链接】New_lxmusic_source 六音音源修复版 项目地址: https://gitcode.com/gh_mirrors/ne/New_lxmusic_source 当你点击播放按钮却只看到加载动画无限循环&#xff0c;当搜索结果永远停留在&qu…...

Kubernetes 环境下 SkyWalking 的高效部署与性能调优

1. Kubernetes 环境下的 SkyWalking 部署实战 第一次在 Kubernetes 上部署 SkyWalking 时&#xff0c;我踩了不少坑。记得当时为了调试一个存储配置问题&#xff0c;整整熬了两个通宵。现在回想起来&#xff0c;如果当时有人能给我一份详细的实战指南&#xff0c;至少能节省 80…...

文墨共鸣惊艳效果:古风UI下实时语义相似度计算与墨韵动画演示

文墨共鸣惊艳效果&#xff1a;古风UI下实时语义相似度计算与墨韵动画演示 1. 项目概览 文墨共鸣是一个将深度学习技术与传统水墨美学完美结合的系统。它基于先进的StructBERT模型&#xff0c;能够智能分析两段文字之间的语义相似度&#xff0c;并通过优雅的古风界面直观展示结…...

3天掌握MediaPipe:从零开始构建实时AI应用的终极指南

3天掌握MediaPipe&#xff1a;从零开始构建实时AI应用的终极指南 【免费下载链接】mediapipe Cross-platform, customizable ML solutions for live and streaming media. 项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe 想快速上手实时AI应用开发却不知…...