效率最高的解法

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

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
只是凑巧测试用例都符合条件,当array=[2,2,2,1,3,5,4,2,2],算法错误
点赞
送花
回复 分享
发布于 2020-07-12 09:30
秋招专场
校招火热招聘中
官网直投
2 2 3 3 2 2 应该输出2,你的算法输出0 不过真不知道你这个算法时怎样通过的,很神奇
点赞
送花
回复 分享
发布于 2020-08-16 16:00
是a...都没排序,只是碰巧通过用例而已..
点赞
送花
回复 分享
发布于 2020-09-22 22:53

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务