效率最高的解法

数组中出现次数超过一半的数字

http://www.nowcoder.com/questionTerminal/e8a1b01a2df14cb2b228b30ee6a92163

看到好多人用排序或者哈希表。其实没必要这么复杂,我们想,一个数组中有一个数字出现的次数,超过一半,那arr[half]必定是这个数字,其中half=arr.length/2。那这样就简单了,遍历一遍数组,统计arr[half]出现的次数,看是否超过数组长度的一半即可。代码如下:

public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        if (array==null||array.length==0)
            return 0;
        int half=array.length/2;
        int num=array[half];
        int count=0;
        for (int item:array){
            if (item==num)
                ++count;
        }
        if (count>half)
            return num;
        return 0;
    }
}

效率应该比排序或哈希表的时间和空间效率都要好得多。

全部评论
这个不对吧,怎么可能这么做,测试样例刚好通过而已!!!
1 回复 分享
发布于 2020-08-07 09:22
是a...都没排序,只是碰巧通过用例而已..
点赞 回复 分享
发布于 2020-09-22 22:53
2 2 3 3 2 2 应该输出2,你的算法输出0 不过真不知道你这个算法时怎样通过的,很神奇
点赞 回复 分享
发布于 2020-08-16 16:00
只是凑巧测试用例都符合条件,当array=[2,2,2,1,3,5,4,2,2],算法错误
点赞 回复 分享
发布于 2020-07-12 09:30

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务