从各个角度扯谈一面试算法题

 

    题目:一个Int型数组,存放的数据中有个重复的次数是奇数次,其他的重复的次数全是偶数次。

    要求:找出这两个数据,时间复杂度是O(n) 空间复杂度是O(1)

 

名词简单解释

     时间复杂度是O(n)案例:遍历一个长度为n的数组,时间复杂度是O(n) 如果在for循环里嵌套一个长度为n的循环那么时间复杂度是O(n2).如果两个for循环有先后顺序,无嵌套关系,时间复杂度还是O(n).

      空间复杂度是O(n)案例:创建一个长度为n的数组占用的空间是与n成正比的,空间复杂度是O(n).

 

解决办法

(1)假设数据是:554433444444223355552222

(2)第一步:将数据依次进行异或运算,即:5544异或运算得到aa再与33异或运算得到b,一直到最后得到一个数值为x.  

   

     步骤详解:

     1>“异或”规则:相同为0 不同为例如1001异或1010等于0011

     2> 进行异或运算以后,所有的出现偶数次的数,变成了0,相当于被剔除,出现奇数次的55中有255异或得到0322中有2个异或得到0,最后相当于5522进行异或运算,得到x可以肯定的是x不为0

 

(3)第二步:假设x的右边的第一位为1(其他位上为1同样可以使用该位),写一个方法假设是public boolean isOne(int value,int num){},用途是判断输入的value在第num位是否为1,返回Boolean结果。将x与原始数据再次进行异或运算。不过要加上isOne方法进行判断,结果是x分别与在第一位上是1的数据异或得到a,第一位上是0的数据异或得到bab就是要求的两个数。

     步骤详解:

     isOne()方法将数据分为两种即第一位上为0的和第一位上是1的,可以肯定的是要求 的数据ab一定是不同的两种类型。那么就像是第一步中一样所有的出现偶数次的全部消去,结果是x22异或得到结果是55,x55异或得到结果是22

 

一些想法

变形1:一个Int型数组,存放的数据中有个重复的次数是偶数次,其他的重复的次数全是奇数次。(奇数和偶数变换顺序)

变形2:一个Int型数组,存放的数据中有3个重复的次数是奇数次,其他的重复的次数全是偶数次。(2个变为3个)

 

变形1:仔细分析的话结果是行不通的,对于第一个的想法可以变成不是异或运算而是同或运算,但是第一步就将要求的两个数ab剔除了。所以第一步就做不到得到一个上一种的一个肯定不为0x。就别提第二步了。

变形2:第一步可以实行,得到一个a,bc 三个数异或。但是不能确定这个结果肯定为0或不为0,事情变得不好处理。可以分类讨论。(此处不做分析)

 

再看本题该方法的妙处

依据:

第一步利用数据ab相同之处是两者出现的次数是偶数,此条件可以将所有的数据分为两派,此时ab属于同一方。

第二步利用数据ab不同之处是两者至少存在一位不同,此条件可以将所有的数据分为两派,此时ab属于不同方。

关键方法巧用异或,解决了关于奇次和偶次的问题。

 

      不论是奇还是偶,还是“两”个数。其实都是表示了01世界中的两种可能,代表的是中逻辑,无关数量。知己知彼才能各个突破

 

 

内容概要:本文详细探讨了基于樽海鞘算法(SSA)优化的极限学习机(ELM)在回归预测任务中的应用,并与传统的BP神经网络、广义回归神经网络(GRNN)以及未优化的ELM进行了性能对比。首先介绍了ELM的基本原理,即通过随机生成输入层与隐藏层之间的连接权重及阈值,仅需计算输出权重即可快速完成训练。接着阐述了SSA的工作机制,利用樽海鞘群体觅食行为优化ELM的输入权重和隐藏层阈值,从而提高模型性能。随后分别给出了BP、GRNN、ELM和SSA-ELM的具体实现代码,并通过波士顿房价数据集和其他工业数据集验证了各模型的表现。结果显示,SSA-ELM在预测精度方面显著优于其他三种方法,尽管其训练时间较长,但在实际应用中仍具有明显优势。 适合人群:对机器学习尤其是回归预测感兴趣的科研人员和技术开发者,特别是那些希望深入了解ELM及其优化方法的人。 使用场景及目标:适用于需要高效、高精度回归预测的应用场景,如金融建模、工业数据分析等。主要目标是提供一种更为有效的回归预测解决方案,尤其是在处理大规模数据集时能够保持较高的预测精度。 其他说明:文中提供了详细的代码示例和性能对比图表,帮助读者更好地理解和复现实验结果。同时提醒使用者注意SSA参数的选择对模型性能的影响,建议进行参数敏感性分析以获得最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值