看到好多人用排序或者哈希表。其实没必要这么复杂,我们想,一个数组中有一个数字出现的次数,超过一半,那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;
    }
}

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