寻找主元素

寻找主元素算法

之前问的一个问题http://topic.youkuaiyun.com/u/20100430/16/3a815617-9d6f-4945-b15c-14dfecfe4b23.html?seed=1361273005&r=65129463#r_65129463

 

一开始觉得寻找中位数的方法已经很不错了,后来又发现了一个更加简单的方法,果然大家都很厉害呢,集思广益,可以从大家这里学到很多考虑问题的方法。

 

下面这些都是摘抄大家的回答,和我自己的实现。

 

题目:

已知有一个数组Array[N],其中有一个元素在数组中出现的次数超过了N/2次,请找出这个元素,要求时间复杂度为O(n)。

 

算法思想:

方法1. 寻找中位数,这个就不详说了

方法2. 如果删去原序列中的两个不同元素,则原序列中的主元素仍然在剩下的序列中 。

 

实现:

只许要每次如果遇到和暂时预定的结果是同一个数的话就计数加1。 
否则计数减1。。 如果计数减到0的话说明前面的数有相同的和不同的数相同的数目 
所以在这里可以当一个新的开始。。把下个数当新的预定数。。 直到最后那个数

如果降到0这个点上的话就可以把这个点当作新的起点。 
这个方法可行性是基于相同数超过n/2这个基础上的

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值