力扣刷题day5 ---数组&&异或操作

Unity中做力扣算法题(Day6 黑板异或游戏) 基础tips之前博文有。 题目: 思路: 这其实是个博弈论的问题,谁先手谁后手,数组为偶数个还是奇数个都是决定胜负的关键,但我们的目标还是那句话,只需要达到将算法过程变成更好理解的方式,也就是说假设你是Alice并且先手,然后当你擦掉数字之后,另一个人选的时候,异或运算得出的结果是0,看到0的这个人就欣喜的胜利了,也就是winner,抓住这点,我们就可以开始做了。 “原力与你同在”。 效果图: Alice获胜: Bob获胜: 全部擦掉后Alice获胜: 源代码: X. 阅读详情

136. 只出现一次的数字

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

示例 1 :

输入:nums = [2,2,1]
输出:1

示例 2 :

输入:nums = [4,1,2,1,2]
输出:4

示例 3 :

输入:nums = [1]
输出:1

第一次接触到这样的解法 想的是使用hash表统计一下出现得次数 然后输出出现一次的数  感觉还可以,但是看了 题解 发现还可以这样做 ,学废了

异或运算的性质:

·0^A=A 0异或任何数A都等于A本身

·A^A=0 任何数A异或其本身都等于0

·异或运算满足交换律, 即A^B=B^A

·异或运算满足结合律,即(A^B)^C=A^(B^C)

题解:(哈希表就不写了)

int MyFun(std::vector<int>& nums)
{
	int ret = 0;
	for (int num : nums)
	{
		ret ^= num;
	}
	return ret;
}

另外在查找资料时 看到了拓展问题 就一起整理了 ,方便以后复习:

---------------------------------------------------------------------------------------------------------------------------------
问题:一个数组中,只有2个数出现奇数次,其他数均出现偶数次。求出现奇数次的这2个数

解:结合上一个问题,可以知道,这个数组整体遍历异或一遍,可以消去出现偶数次的数值,假设2个待求数分别为A和B,原数组

n1^n2^n3......^nN = A^B

已知 A != B,则A和B的二进制数中至少有一位是不相等的,即假设A的二进制数第N位是1,B的第N位是0。利用此差异,可以将A单挑出来。方法是找到所有二进制数第N位是1的数,全部异或起来,得到数值A

ni^nj......nk = A  (ni, nj......nk都是二进制数第N位是1的数)

求得A和A^B,使用 A ^ A ^ B = B

则得到A和B,代码如下

void MyFun(std::vector<int>& arr, int& A, int& B)
{
	int ret = 0;
	//求得A ^ B = ret
	for (int it : arr)
	{
		ret ^= it;
	}
	//找到A和B中不相等的最低位
	//相当于找A^B,即ret中等于1的最低位
	//常规算法,找到一个数R中等于1的最低位,可以用 R &(R的补数)实现
	const int ro = ret & (~ret + 1);
 
	//取得A
	A = 0;
	for (int it : arr)
	{
		//挑选出指定位为1的数值,遍历异或
		if (ro & it)
		{
			A ^= it;
		}
	}
 
	//取得B
	B = ret ^ A;
}


                        
参考链接:https://blog.youkuaiyun.com/ymhdt/article/details/123611261

ISMN数据处理 可批量下载,十分方便 阅读详情

相关推荐

教程 | VeriStand硬件在环仿真测试第一章

这篇是系列文章的第一章,满满的都是干货,感兴趣的话欢迎一起交流探讨。

HUASUITECH的博客 1万+

【算法】异或算法找缺失的数-力扣两道经典题目的讲解

【算法】异或算法找缺失的数 leetcode面试题17.04–消失的数字及其变式 异或算法 leetcode面试题17.04–消失的数字 算法及其原理 异或算法 原理:两个相同的数字互相异或结果是0,任何数异或0是它本身。 所以上面这道题的思路: 声明一个整型ret变量记录结果,把nums数组里面所有的数异或在一起,赋给ret,接着,让0-n里面所有的数异或在一起,然后再与ret异或,最后就是得到我们缺失的数字。 因为每个数字再经历两次循环异或之后,出现的数字相当于自己异或了自己,剩下0-N中,num

系统编程、网络编程 2484

线性调频LFM脉冲压缩 连续波雷达仿真&线性调频信号仿真分析压缩matlab程序源码

13、线性调频信号(LFM)压缩感知的稀疏与重构算法(OMP)的matlab仿真程序(一个可以在matlab上运行的压缩感知实例;8、具有多普勒频移的线性调频信号(知道带宽、采样频率、T使用MATLAB仿真线性调频信号即LFM,同时具有多普勒频移时,匹配滤波后的波形变化。19、CW脉冲和LFM信号Matlab仿真(这是matlab仿真程序,实现了常规雷达信号CW和线性调频信号LFM的仿真)18、lfm信号模糊函数图 matlab(用matlab 实现的线性调频信号信号(lfm)的模糊函数图)

2301_77866396的博客 400

每日一题——力扣——数组异或操作

题目来源于力扣——1486. 数组异或操作 - 力扣(LeetCode) (leetcode-cn.com) 给你两个整数,n 和 start 。 数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。 请返回 nums 中所有元素按位异或(XOR)后得到的结果。 示例 1: 输入:n = 5, start = 0 输出:8 解释:数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^

爱编程的晖哥的博客 6032

保姆级教程:在Ubuntu 22.04上,用Chroot和xorriso定制你的专属服务器镜像(附离线包集成)

本文提供了一份详细的Ubuntu 22.04离线镜像定制教程,通过Chroot环境和xorriso工具,帮助用户打造专属服务器镜像。教程涵盖环境准备、镜像解构、系统定制、镜像重组与验证等全流程,特别适合需要在隔离网络环境中批量部署服务器的场景。

weixin_28704565的博客 443

【实战解析】Ubuntu双网卡冲突:如何解决同一网段下网关无法访问及上网问题

本文深入解析Ubuntu服务器双网卡配置在同一网段时引发的路由冲突问题,导致网关无法ping通及无法上网。通过分析路由表与Metric值原理,提供使用route命令调整优先级及修改Netplan配置文件的实战解决方案,确保主次路由明确,一劳永逸解决网络冲突。

f9g0h的博客 280

【力扣】——解码异或后的数组

题目描述:数组arr由n个非负整数组成,经编码后变为长度为n - 1的另一个整数数组encoded,其中encoded[i] = arr[i]^arr[i + 1] 给你编码后的数组encoded和原数组arr的第一个元素first(arr[0])。 请解码返回原数组arr。可以证明答案存在并且是唯一的。 思路:对于异或来说,若a^b=c,那么就有a^c=b、b^c=a(在解题时找出的规律,后面会解释),所以除arr[0]为first外,arr[i]=arr[i-1]*enc...

qq_52989768的博客 813

CVAT自动标注避坑指南:从nuctl安装到YOLOv5模型部署的完整流程

本文详细介绍了在CVAT中部署YOLOv5自动标注功能的完整流程与避坑指南。重点解决了从nuctl工具安装、项目创建时因网络问题导致的镜像拉取失败,到最终模型函数部署与CVAT集成的关键步骤。针对国内网络环境,提供了实用的镜像替换方案,帮助用户顺利完成基于CPU的自动化标注环境搭建。

pytorch8learner的博客 229

只出现一次的数字 ----<异或位运算>-----力扣

异或位运算的妙用 这是一道力扣的简单题,最开始我想的是用数组,先对所有数据进行排序,然后遍历数组元素,如果a[i] = a[i+1],那么i+=2;continue;因为只有一个数字出现了一次,那么当a[i] != a[i+1]时,a[i]就是要找的数。 后面看了评论区之后,发现一种很简洁有意思的做法——按位异或 一、什么是异或? 之前离散数学里学习到这样一种特别的逻辑运算:按位异或。计算机进行按*异或运算的步骤为: 1、将两个数a、b先转换为二进制数(此步就决定了后续异或运算中每一次对应位的异或运算都

前端小白, 稀土:雩风十六 433

PyTorch深度学习实战(1)——神经网络与模型训练过程详解

在本节中,我们将了解传统机器学习与人工神经网络间的差异,并了解如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现反向传播以优化权重达到最小化损失值的目标。并将实现网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 9万+

uniapp [安卓苹果App端] - 详细实现下载文件保存到用户手机本地,指定文件存储位置路径及文件夹名称下载并保存,Uniapp app端将文件下载保存并储存到指定目录(手机系统存储空间权限检测)

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,app端下载文件,移动端文件下载,并保存到手机本地存储空间,uniapp下载文件保存到手机本地,iOS下载文件怎么保存,系统读写存储空间权限,下载文件到本地详细流程及源代码,保存自定义目录,uniapp,实现下载文件并保存到本地,文件后缀,如何指定手机的存放目录路径url,点击下载文档到手机中并提示存储位置,如何在uniapp中实现文件下载功能,uniApp文件下载,怎么指定文件保存目录,下载报错,没反应

🏆 前端领域优质创作者 1万+

巧用异或知识解决力扣中的题目

题目:找出一个列表中缺失的那个数字,比如a = [1,1,2,2,3,4,4],通过算法找出缺失的数字为3.这里有个坑,如果你使用count计数器来做的话,他会报超时出错误,因为系统会给你一个特别庞大的列表,所以你需要考虑时间复杂度。下面是我写的两种方法,大家可以参考一下: 第一种:使用异或操作,这个大家或许都不怎么用,举个例子假设有a,b两个数字,经过异或运算你会发现一个神奇的事情。那就是: a...

qq_42166308的博客 318

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

leetcode hot100 简单难度 day02-刷题

leetcode hot100 简单难度 day02-刷题

weixin_46676835的博客 873

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LeetCode刷题 day02

士兵堡垒法,是将其中的元素来模拟士兵攻占堡垒的情形。如果元素不同,该士兵元素站上堡垒,遇到跟它一样的士兵元素,两者同归于尽。一直战斗到最后,只剩下战斗到最后士兵成功站上堡垒。

qq_67931344的博客 478

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

力扣-Hot100-技巧【算法学习day.31】

##我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!

2301_79232523的博客 563

LeetCode刷题 day24

这题的关键是读懂题意,数组长度表示一共发表n篇文章,则这里h最大为n,因为最多有n篇文章引用次数大于等于n,因此可以定义一个长度为n+1的数组,cnt[k]保存引用次数为k的文章数,对于引用次数大于k的文章算作cnt[n]的计数,然后从cnt[n]到cnt[0]一直遍历,直到后缀和大于k即可。首先将原数组转化成[-1,1]的数组,其中值为target的为1,其余为-1,则原问题转化成,统计子数组和大于0的个数。如果nums[j+1]=-1,则f[j+1] = f[j] - cnt[s[j+1]];

m0_37949220的博客 171

【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名

与 当前数组各个数异或,若结果为x,则返回x;当x等于0时,需要格外处理,有两种情况,缺0或者是最后一个数后面的数。这道题的二分查找很有趣,需要细节,能发现二段性,这题就相当简单。若结果为x,则返回x;当x等于0时,需要格外处理,与思路3一样。遍历数组,寻找后一位减前一位的差为2的数,找到就返回,没找到就返回最后一个数的下一个。这里我们可以有两种方式:以A为参照,以D为参照,来找C点的值。这道题很简单,有很多思路,简单的我就直接讲一下过程就OK。分别将数据导入哈希表,然后查看哪个数的个数为零,返回该值。

认真分享博客,认真分享学习 996

Leetcode每日刷题【中】--Day 5

1720. 解码异或后的数组 这是一道位运算的简单题,后边有此题升级版的中等题目 其实,知道一些基本知识后,此题是很简单的。 异或满足交换律 异或满足:a ^ b = c 可知 a ^ c = b a ^ 0 = a a ^ a = 0 这道题给出了加密后的数组,同时也给出了原数组的第一个值,利用上边的第二个知识,问题就迎刃而解了。 将加密数组的第一个元素和原数组的第一个元素异或就得到原数组第二个元素…根据题目,就这样推下去答案就出来了。 class Solution: def decode(s

weixin_52103757的博客 113

leetcode刷题Day8

对于每个 0

m0_63318949的博客 1027

力扣-位运算-2【算法学习day.42】

##我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!

2301_79232523的博客 511

LeetCode刷题 day6

输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8]输入:image = [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]然后反转图片: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]输出:[[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]

m0_37949220的博客 392

【Leetcode刷题笔记 持续更新】Day08

Day 08 异或运算:x ^ 0 = x​ , x ^ 1 = ~x 与运算:x & 0 = 0 , x & 1 = x 数组中数字出现的次数 I 在一个数组 nums 中除两个数字只出现一次之外,其他数字都出现了两次。请找出只出现一次的数字。 思路: 这个问题在于如何找出两个出现一次的数字。假设数字分别为x,y 如果只有一个数字,那么将数组所有数字异或便能得到那个数。但是题目中有两个,那么异或的结果为x^y。 因为x和y必不相同,所以至少二进制中有一位不相同,因此根据此位可以将

Juvenile_chi的博客 198

刷题Day4

刷题Day4

tyztyztyz35的博客 432

LeetCode 421. 数组中两个数的最大异或值(Maximum XOR of Two Numbers in an Array) 71

421. 数组中两个数的最大异或值 421. Maximum XOR of Two Numbers in an Array 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231。 找到 ai 和 aj最大的异或 (XOR) 运算结果,其中 0 ≤ i,j < n。 你能在 O(n) 的时间解决这个问题吗? 每日一算法201...

weixin_30753873的博客 218

leetcode-刷题日记(包括思路整理和学习大佬们的算法)-[代码同步更新到Github]

leetcode 每日一题 day1 -买卖股票的最佳时机 II day2 -存在重复元素 day3 -只出现一次的数字 day4 -两个数组的交集 II day5 -加一 第一天 -买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例一 输入: [7,1,5,3,6,4] 输出: 7

qq_36016038的博客 541

力扣算法刷题记录---day01

力扣算法刷题记录----01

qq_45757356的博客 251
上一篇: c++ 学习笔记 set 容器使用指定规则排序
下一篇: 力扣刷题day6 ---数组&&双指针
Qian_Chi
博客等级 码龄5年 64粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值