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; //查找失败
}
}