Given an array of integers and a number k, the majority number is the number that occursmore than 1/k of the size of the array. Find it.
Note
There is only one majority number in the array.
Example
For [3,1,2,3,2,3,3,4,4,4] and k = 3, return 3
思路:使用HashMap,存k个值,key为数组中的元素值,value为该值出现的次数。若同时有k个不同的元素在map中,则抵销一次,即所有value减一,并删除value为零的key,遍历一遍后,map中value最大的key为答案。
Solution:
public int majorityNumber3(int[] A, int k){
if (A == null || A.length == 0 || k > A.length) {
return -1;
}
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < A.length; i++) {
if (map.containsKey(A[i])) {
map.put(A[i], map.get(A[i]) + 1);
} else if (map.size() < k) {
map.put(A[i], 1);
} else {
ArrayList<Integer> keys = new ArrayList<Integer>();
for (Integer key : map.keySet()){
keys.add(key);
}
for (Integer key : keys) {
map.put(key, map.get(key) - 1);
if (map.get(key) == 0) {
map.remove(key);
}
}
}
}
int res = 0;
int num = 0;
for (Integer key : map.keySet()) {
if (num < map.get(key)) {
num = map.get(key);
res = key;
}
}
return res;
}