题目如下
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) {
HashMap<Integer,Integer> map=new HashMap<>();
for(int a:num){
if(map.get(a)!=null){
int i=map.get(a);
map.put(a,i+1);
}
else{
map.put(a,1);
}
}
List<Map.Entry<Integer,Integer>> list =new ArrayList<>();
list.addAll(map.entrySet());
Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>(){
public int compare(Map.Entry<Integer,Integer> m1,Map.Entry<Integer,Integer> m2){
return m2.getValue()-m1.getValue();
}
});
return list.get(0).getKey();
}
}
第二种方案如下:充分利用了题中所给条件
public class Solution {
public int majorityElement(int[] num) {
HashMap<Integer,Integer> map=new HashMap<>();
for(int a:num){
if(map.get(a)!=null){
int i=map.get(a);
map.put(a,i+1);
}
else{
map.put(a,1);
}
}
for(Map.Entry<Integer,Integer> m:map.entrySet()){
if(m.getValue()>num.length/2){
return m.getKey();
}
}
return 0;
}
}
第三种解法是我在网上搜的:看完之后,累觉不爱了。。
public class Solution {
public int majorityElement(int[] num) {
Arrays.sort(num);
return num[num.length/2];
}
}
WTF。。。。