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

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

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

HashMap方法:
哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量,
//最终超过数组长度一半的数字则为众数。此方法时间和空间复杂度均为 O(N)O(N)

public int MoreThanHalfNum_Solution(int [] array) {

        HashMap<Integer,Integer> map = new HashMap<>();
        int max = array.length / 2;

        //哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量,
        //最终超过数组长度一半的数字则为众数。此方法时间和空间复杂度均为 O(N)O(N) 
        for(int i = 0;i<array.length;i++){
            if(!map.containsKey(array[i])){
                map.put(array[i],1);
            }else{
                map.put(array[i],map.get(array[i])+1);
            }
        }
        for(int key:map.keySet()){//map.keySet()获取key集合
            if(map.get(key)>max){
                return key;
            }
        }
        return 0;


    }

排序法:位于中间的是众数

public int MoreThanHalfNum_Solution(int [] array) {
        Arrays.sort(array);
        int len = array.length;
        int midlen = (0+len-1) /2;
        int out = array[midlen];
        int count = 0;
        for(int i = 0;i<len;i++){
            if(array[i] == array[midlen]) count++;
        }
        if(count >(len/2)) return out;
        return 0;

    }
全部评论

相关推荐

09-29 17:44
已编辑
蔚来_测(准入职员工)
//鲨鱼辣椒:见不了了我实习了四个月上周再投筛选了一天就给我挂了
点赞 评论 收藏
分享
Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务