首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

请问一道笔试题,多谢

2012-04-07 
请教一道笔试题,谢谢!题目大概是这样的:已知有一个数组Array[N],其中有一个元素在数组中出现的次数超过了N

请教一道笔试题,谢谢!
题目大概是这样的:
已知有一个数组Array[N],其中有一个元素在数组中出现的次数超过了N/2次,请找出这个元素,要求时间复杂度为O(n)。(不知道我有没有表达清楚。。。)

我对算法没怎么研究过,我能想到的方法都效率不高,请问大家有什么好方法没?谢谢~

[解决办法]
找中位数即可,O(n)的复杂度,看算法导论
[解决办法]
元素在数组中出现的次数超过了N/2次称之为主元素
算法基本思想:如果删去原序列中的两个不同元素,则原序列中的主元素仍然在剩下的序列中 。
见:http://cs2.scnu.edu.cn/alg_webcourse/kcln/2/6.htm
[解决办法]
汗 其实根本不用排序。。。只许要每次如果遇到和暂时预定的结果是同一个数的话就计数加1。 
否则计数减1。。 如果计数减到0的话说明前面的数有相同的和不同的数相同的数目 
所以在这里可以当一个新的开始。。把下个数当新的预定数。。 直到zuihou那个数

 
不知到怎么表达。。 设想一条曲线 每次遇到相同的数九往上爬一点 如果遇到不同的数
就往下降一点
[解决办法]
微软技术面试心得2.3
0(n)复杂度
[解决办法]
另外设置一个数组b[n]并把它初始化每个元素为0,然后设置i:1-n循环 b[array[i]]++;
然后找出b[n]中=N/2的那元素对应于array中的数就可以了,下班了说得有点模糊不好意思。。。

热点排行