题目:一个Int型数组,存放的数据中有两个重复的次数是奇数次,其他的重复的次数全是偶数次。
要求:找出这两个数据,时间复杂度是O(n) 空间复杂度是O(1)
名词简单解释:
时间复杂度是O(n)案例:遍历一个长度为n的数组,时间复杂度是O(n) 如果在for循环里嵌套一个长度为n的循环那么时间复杂度是O(n2).如果两个for循环有先后顺序,无嵌套关系,时间复杂度还是O(n).
空间复杂度是O(n)案例:创建一个长度为n的数组占用的空间是与n成正比的,空间复杂度是O(n).
解决办法:
(1)假设数据是:55,44,33,44,44,44,22,33,55,55,22,22。
(2)第一步:将数据依次进行异或运算,即:55与44异或运算得到a,a再与33异或运算得到b,一直到最后得到一个数值为x.
步骤详解:
1>“异或”规则:相同为0 不同为1 例如1001异或1010等于0011
2> 进行异或运算以后,所有的出现偶数次的数,变成了0,相当于被剔除,出现奇数次的55中有2个55异或得到0,3个22中有2个异或得到0,最后相当于55和22进行异或运算,得到x(可以肯定的是x不为0)
(3)第二步:假设x的右边的第一位为1(其他位上为1同样可以使用该位),写一个方法假设是public boolean isOne(int value,int num){},用途是判断输入的value在第num位是否为1,返回Boolean结果。将x与原始数据再次进行异或运算。不过要加上isOne方法进行判断,结果是x分别与在第一位上是1的数据异或得到a,第一位上是0的数据异或得到b,a和b就是要求的两个数。
步骤详解:
isOne()方法将数据分为两种即第一位上为0的和第一位上是1的,可以肯定的是要求 的数据a和b一定是不同的两种类型。那么就像是第一步中一样所有的出现偶数次的全部消去,结果是x与22异或得到结果是55,x与55异或得到结果是22。
一些想法:
变形1:一个Int型数组,存放的数据中有两个重复的次数是偶数次,其他的重复的次数全是奇数次。(奇数和偶数变换顺序)
变形2:一个Int型数组,存放的数据中有3个重复的次数是奇数次,其他的重复的次数全是偶数次。(2个变为3个)
变形1:仔细分析的话结果是行不通的,对于第一个的想法可以变成不是异或运算而是同或运算,但是第一步就将要求的两个数a和b剔除了。所以第一步就做不到得到一个上一种的一个肯定不为0的x。就别提第二步了。
变形2:第一步可以实行,得到一个a,b和c 三个数异或。但是不能确定这个结果肯定为0或不为0,事情变得不好处理。可以分类讨论。(此处不做分析)
再看本题该方法的妙处:
依据:
第一步利用数据a和b的相同之处是两者出现的次数是偶数,此条件可以将所有的数据分为两派,此时a和b属于同一方。
第二步利用数据a和b的不同之处是两者至少存在一位不同,此条件可以将所有的数据分为两派,此时a和b属于不同方。
关键方法:巧用异或,解决了关于奇次和偶次的问题。
不论是奇还是偶,还是“两”个数。其实都是表示了0和1世界中的两种可能,代表的是中逻辑,无关数量。知己知彼才能各个突破。
分享到:
相关推荐
它不是那些老套陈旧的动机心理学扯谈。 我并不是说那些传统的应对拖延症的方法理论不对,只是对我无效。当正经历极度消沉的时候,我通常听到的理论的最后一句话是”You just DO IT!”。我有很多的事情要去做。但我...
原型模式i的定义:每个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法。比如在构造函数模型中sayInformation()方法,如果声明两个实例就要构造两次...
DCM与PFC融合的CRM混合模式创新实践,DCM CRM混合模式PFC ,DCM; CRM混合模式; PFC,DCM与PFC的混合模式在CRM系统中的应用
Radon-Wigner变换与Wigner-Hough估计在信号参数提取中的应用研究——线性调频信号处理与雷达信号速度补偿的探索,利用Radon—Wigner变,Wigner—Hough估计线性调频信号参数,信号参数估计,雷达信号处理,速度补偿 ,核心关键词:Radon—Wigner变换; Wigner—Hough估计; 线性调频信号参数估计; 信号参数估计; 雷达信号处理; 速度补偿,利用Radon-Wigner变换与Wigner-Hough估计,实现线性调频信号参数快速估计,雷达信号处理中的速度补偿技术
基于三菱PLC与组态王技术的自动化立体车库堆垛书架控制系统研究与应用第1100例实践,No.1100 基于三菱PLC和组态王组态自动化立体车库控制堆垛书架 ,三菱PLC; 组态王组态; 自动化立体车库; 控制; 堆垛书架,基于三菱PLC与组态王控制的立体车库堆垛书架自动化系统
"交错并联Boost PFC仿真电路模型:双闭环控制策略下的输出电压与电感电流分析",交错并联Boost PFC仿真电路模型 采用输出电压外环,电感电流内环的双闭环控制方式 交流侧输入电流畸变小,波形良好,如效果图所示 plecs matlab simulink仿真模型 ,核心关键词: 交错并联Boost; PFC仿真电路模型; 双闭环控制方式(输出电压外环、电感电流内环); 交流侧输入电流畸变小; 波形良好; plecs matlab simulink仿真模型。,基于PLECS与Matlab Simulink的Boost PFC双闭环控制仿真模型
"COMSOL仿真:固体超声导波二维模拟及汉宁窗调制5周期正弦激励信号的添加与中心频率200kHz的位移控制",COMSOL—固体超声导波二维仿真 激励信号为汉宁窗调制的5周期正弦函数,中心频率为200kHz 通过指定位移来添加激励信号 ,COMSOL;固体超声导波;二维仿真;汉宁窗调制;正弦函数;中心频率200kHz;指定位移添加激励信号。,COMSOL固体超声导波二维仿真:汉宁窗调制正弦激励信号添加
MATLAB环境下多元变分模态分解与多通道去趋势波动分析多变量信号去噪技术的研究与应用,MATLAB环境下一种基于多元变分模态分解和多通道去趋势波动分析的多变量信号去噪方法。 算法运行环境为MATLAB r2018a,算法可迁移至金融时间序列,地震信号,语音信号,声信号,生理信号(ECG,EEG,EMG)等信号。 ,多元变分模态分解; 多通道去趋势波动分析; MATLAB r2018a; 金融时间序列; 地震信号; 语音信号; 声信号; 生理信号去噪,MATLAB多模态多通道去噪算法在多元信号处理中的应用
基于COMSOL的高坝三维应力渗流耦合分析程序:突破传统二维限制的数值模拟研究,基于comsol的高坝-应力渗流耦合分析,三维程序,非二维 ,基于Comsol; 高坝-应力渗流耦合分析; 三维程序; 非二维。,基于COMSOL的三维高坝应力渗流耦合分析程序
"利用Matlab的Music算法提升雷达超分辨成像的图像质量及分辨率",matlab的Music算法,可用于雷达超分辨成像,提高图像分辨率 ,Matlab的Music算法; 雷达超分辨成像; 提高图像分辨率,Matlab Music算法:雷达超分辨成像,提升图像分辨率
面向农网变电站低成本巡检监督终端研究与实现.pdf
融合Floyd算法优化的改进A星算法:多方向搜索与路径平滑度提升的代码实现,融合floyd算法的改进A星算法路径规划代码 可备注,可以,可依据需求更改地图 %% 改进A*算法 路径规划 % 改进A*算法 1 8个搜索方向变成 5个 提高搜索方向 % 2 无斜穿障碍物顶点 避免发生碰撞 % 3 基于改进floyd双向平滑度优化,删除中间多余节点,减少转折,增加路径的平滑度 % 4 评价函数:f(n)=g(n)+(1-log(P))*h(n) % P表示起始点与目标点之间的障碍率 % = 障碍物的数量 栅格总数 % 其中r为当前点到目标点的距离,R为起始点到目标点的距离。 % 试验对比如下 ,核心关键词:融合Floyd算法;改进A星算法;路径规划代码;搜索方向优化;无斜穿障碍物顶点;双向平滑度优化;评价函数;P值表示障
个人网站 界面优美 代码简单 适合初学者和大学毕业设计。
"深度学习驱动的MIMO雷达目标检测与二维测角技术",使用深度学习进行MIMO 雷达目标检测,二维测角 ,使用深度学习进行MIMO雷达目标检测; MIMO雷达; 目标检测; 二维测角,深度学习助力MIMO雷达目标二维测角检测
tf.data定义高效的输入流水线
基于三菱FX PLC的组态王五层电梯控制系统设计与实现,No.1294 三菱FX PLC基于组态王五层电梯控制系统 ,三菱FX PLC; 组态王; 五层电梯; 控制系统; 编号1294,"三菱FX PLC五层电梯控制系统"
OFDM系统调制下QPSK与16QAM的误码率比较分析程序,OFDM系统在QPSK与16QAM调制下,误码率比较程序 ,OFDM系统; QPSK调制; 16QAM调制; 误码率比较程序,OFDM系统调制下误码率比较程序:QPSK vs 16QAM
,西门子s7-1200plc控制5轴伺服,采用结构化编程,触摸屏采用威纶通,项目实现以下功能, 1.plc程序结构 采用结构化编程,每一功能为模块化设计,功能:自动-手动-单步-暂停-伺服断电保持-报警功能等等。 每个功能块建好后都能无数次调用。 三轴机械手x轴-y轴-z轴取放料脉冲定位控制台达b2伺服。 台达伺服速度模式应用,扭矩模式应用。 2触摸屏程序结构 手动画面-报警画面-资料数据-历史数据-用户管理-配方设置-伺服自动画面-伺服参数-i o监控等。 3电气图纸 主电路,伺服电路,plc输入输出控制电路等等 plc程序结构清晰,层次分明,注释齐全。 触摸屏程序画面精美。 cad制图精美。 都可以作为后续自己项目的参考模版。 参考本案例程序。 可快速掌握西门子1200控制伺服编程技巧,扩展自己的编程逻辑思维。 节省大量不必要花费的时间,可快速上手。 plc程序博途v14 以上都能打开。
da3be767d73d8b8ed90b550558f72b4c.part1
基于MATLAB的3-RPS并联机器人动力学与运动学仿真控制技术研究,利用Simulink与Simscape平台进行仿真分析,MATLAB3-rps并联机器人动力学仿真,运动学仿真控制,simulink simscape ,核心关键词:MATLAB; 3-rps并联机器人; 动力学仿真; 运动学仿真控制; Simulink; Simscape;,MATLAB仿真实验:并联机器人动力学与运动学控制