public int[] topKFrequent(int[] nums, int k) {
ArrayList<LinkedList<Integer>> freqList = new ArrayList<>();
for (int i = 0; i <= nums.length; i++) {
freqList.add(new LinkedList<Integer>());
}
HashMap<Integer, Integer> elementFreq = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (elementFreq.containsKey(nums[i])){
elementFreq.put(nums[i], elementFreq.get(nums[i]) + 1);
}
else {
elementFreq.put(nums[i], 1);
}
}
Iterator<Integer> elemItr = elementFreq.keySet().iterator();
while (elemItr.hasNext()) {
int currKey = elemItr.next();
freqList.get(elementFreq.get(currKey)).add(currKey);
}
ArrayList<Integer> intsByFreq = new ArrayList<>();
for (int i = 0; i < freqList.size(); i++) {
LinkedList<Integer> currList = freqList.get(i);
ListIterator<Integer> currListItr = currList.listIterator(0);
while (currListItr.hasNext()) {
intsByFreq.add(currListItr.next());
}
}
int[] topK = new int[k];
int topKIdx = 0;
for (int i = intsByFreq.size() - 1; i >= intsByFreq.size() - k; i--) {
topK[topKIdx] = intsByFreq.get(i);
topKIdx++;
}
return topK;
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter