经典面试题-数组中出现次数超过一半的数

时间:2015-05-13 06:03:13   收藏:0   阅读:146

【题意】:数组中有一个数字出现超过半数以上,找出这个数字。

【解析】:一个数字超过半数以上,这是本题仅有的条件,所以,我们要从这个条件入手。

数字超过半数有什么特性呢?首先这个数字肯定是这些数的中位数。所以可以排序,然后找中位数。

但是时间复杂度为排序的O(n*logn),还可以再快吗?

现在有这么一个思路,我们知道,要求的这个数超过半数,那么两个不同的数我们消除,相同的累加,

最后一定能剩下那个超过半数的数字。

具体操作:用一个变量用来存当前剩下的数字,用一个变量做计数器。每次比较数字是否相同,相同累加

不同相消,计数器为0时,换数字。

原文:http://www.cnblogs.com/LeeZz/p/4499183.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!