Given an array of integers and a number k, the majority number is the number that occurs more than 1/k
of the size of the array.
Find it.
Example
Given [3,1,2,3,2,3,3,4,4,4]
and k=3
, return 3
.
与II类似。用一个长度为k的map储存一组含有Majority Number的数字。
public class Solution {
/**
* @param nums: A list of integers
* @param k: As described
* @return: The majority number
*/
public int majorityNumber(ArrayList<Integer> nums, int k) {
HashMap<Integer, Integer> res = new HashMap<Integer, Integer>();
//principal number should be in this map.
//value is not equals to the number that it occurs
for (Integer i : nums) {
res.put(i, !res.containsKey(i) ? 1 : res.get(i) + 1);
if(res.size() >= k)
remove(res);
}
//get the ture number that it occurs
for (Integer i : res.keySet())
{
res.put(i, 0);
}
for (Integer i : nums)
{
if (res.containsKey(i))
{
res.put(i, res.get(i) + 1);
}
}
int maxOccur = 0, MN = 0;
for (Integer i : res.keySet())
{
if (res.get(i) > maxOccur)
{
maxOccur = res.get(i);
MN = i;
}
}
return MN;
}
private void remove(HashMap<Integer, Integer> res) {
ArrayList<Integer> delete = new ArrayList<Integer>();
for(Integer i : res.keySet()) {
if(res.get(i) == 1) delete.add(i);
}
for(Integer i : delete) {
res.remove(i);
}
}
}