LeetCode--面试题 17.10. 主要元素

数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。

示例 1:

输入:[1,2,5,9,5,9,5,5,5]
输出:5
 

示例 2:

输入:[3,2]
输出:-1
 

示例 3:

输入:[2,2,1,1,1,2,2]
输出:2
 

说明:
你有办法在时间复杂度为 O(N),空间复杂度为 O(1) 内完成吗?

 

 public static int majorityElement(int[] nums) {
        int size = nums.length;
        if (size == 1) {
            return nums[0];
        }
        int k = 1;
        int j = 0;
        Map<Integer,Integer> map = numsToMap(nums);
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if(entry.getValue() > 1 && entry.getValue() > k && entry.getValue() > size/2){
                k = entry.getValue();
                j = entry.getKey();
            }
        }
        if(k > 1){
            return j;
        }
        return -1;
    }
    
    public static Map<Integer,Integer> numsToMap(int[] nums){
        Map<Integer,Integer> returnMap = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if(returnMap.containsKey(nums[i])){
                returnMap.put(nums[i], returnMap.get(nums[i]) + 1 );
            }else {
                returnMap.put(nums[i], 1);
            }
        }
        return returnMap;
    }

 

posted @ 2020-11-09 11:51  石三爷  阅读(115)  评论(0编辑  收藏  举报