Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋
times.
You may assume that the array is non-empty and the majority element always exist in the array.
解法一:
public class Solution { public int majorityElement(int[] num) { if(num.length == 1) return num[0]; Arrays.sort(num); //对num进行排序 return num[num.length/2]; //中间值一定是majorityElement,否则不可能过半 } }
解法二:
public class Solution { public int majorityElement(int[] num) { if(num.length == 1) return num[0]; Arrays.sort(num); //对数组进行排序 int start = num[0]; int count = 1; for(int i=1; i<num.length; i++){ //遍历数组,求连续相同的元素的个数 if(start == num[i]){ //如果与start相同,count++ count++; if(count > num.length/2) return num[i]; } else{ //如果与start不同,从num[i]开始重新统计连续相同的个数 start = num[i]; count = 1; } } return -1; //查找失败 } }
解法三:
public class Solution { public int majorityElement(int[] num) { if(num.length == 1) return num[0]; Map<Integer, Integer> myMap = new HashMap<Integer, Integer>(); for(int i=0; i<num.length; i++) { if(myMap.containsKey(num[i])){ //利用HashMap来统计num数组中各个元素出现的个数 myMap.put(num[i], myMap.get(num[i])+1); // Map<num[i], count> }else{ myMap.put(num[i], 1); } } Iterator myIterator = myMap.entrySet().iterator(); while(myIterator.hasNext()){ //遍历Map找出count > length/2 的元素 java.util.Map.Entry myEntry = (java.util.Map.Entry) myIterator.next(); int count = (int) myEntry.getValue(); int result = (int) myEntry.getKey(); if(count > (num.length/2)) return result; } return -1; //查找失败 } }