Description:
Given a non-empty array of integers, return the k most frequent elements.
For example,
Given [1,1,1,2,2,3]
and k = 2, return [1,2]
.
Solution:
感觉主要就是用HashMap和PriorityQueue。
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.TreeMap;
class keypair implements Comparable<keypair> {
int key;
int pair;
keypair(int k, int p) {
this.key = k;
this.pair = p;
}
public int compareTo(keypair arg0) {
return this.pair - arg0.pair;
}
}
public class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i])) {
map.put(nums[i], map.get(nums[i]) + 1);
} else {
map.put(nums[i], 1);
}
}
PriorityQueue<keypair> queue = new PriorityQueue<keypair>();
for (Iterator<Integer> iter = map.keySet().iterator(); iter.hasNext();) {
int key = iter.next();
queue.add(new keypair(key, map.get(key)));
}
List<Integer> list = new LinkedList<Integer>();
for (int i = 0; i < k; i++) {
list.add(queue.poll().key);
}
return list;
}
}