Top K Frequent Elements
https://leetcode.com/problems/top-k-frequent-elements/
Method 1 PriorityQueue + HashMap
class Solution {
public int[] topKFrequent(int[] nums, int k) {
// step 1: build the hashmap
Map<Integer, Integer> map = new HashMap<>();
// map, key: value, index: freq
// step 2: build the minHeap
PriorityQueue<Element> minHeap = new PriorityQueue<>();
// go over all the element in hashmap
for (int i = 0; i < nums.length; i++) { // not for all, only for heap
if (map.containsKey(nums[i])) {
map.replace(nums[i] , map.get(nums[i]) + 1);
}
else {
map.put(nums[i], 1);
}
}
// step 3: for loop put in
for (int key : map.keySet()) {
minHeap.offer(new Element(key, map.get(key)));
if (minHeap.size() > k) {
minHeap.poll();
}
}
// step 4: print all the element in the current heap
int[] ret = new int[k];
for(int i = 0; i < k; i++){
ret[i] = minHeap.poll().value;
}
return ret;
}
class Element implements Comparable<Element> {
Integer value;
Integer freq;
public Element(Integer value, Integer freq) {
this.value = value;
this.freq = freq;
}
public int compareTo(Element that) {
if (this.freq == that.freq) {
return 0;
}
return this.freq < that.freq ? -1 : 1;
}
}
}
Method 2 TreeSet + HashMap
class Solution {
public int[] topKFrequent(int[] nums, int k) {
// sanity check
int[] result = new int[k];
Map<Integer, Integer> lookUp = new HashMap<>();
// build the look up map, <value, freq>
for (int i = 0; i < nums.length; i++) {
lookUp.put(nums[i], lookUp.getOrDefault(nums[i], 0) + 1);
}
TreeSet<Element> treeSet= new TreeSet<>();
for (Integer value: lookUp.keySet()) {
Element cur = new Element(value, lookUp.get(value));
treeSet.add(cur);
}
for (int i = k - 1; i >= 0; i--) {
result[i] = treeSet.pollLast().value;
}
return result;
}
class Element implements Comparable<Element> {
int value;
int freq;
public Element(int value, int freq) {
this.value = value;
this.freq = freq;
}
@Override
public int compareTo(Element that) {
int result = Integer.compare(this.freq, that.freq);
if (result == 0) {
return Integer.compare(this.value, that.value);
}
return result;
}
}
}
Question: double linkedlist做的了么?
Last updated