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; }