LeetCode347.前K个高频元素(Java实现)

链接:https://leetcode-cn.com/problems/top-k-frequent-elements/

class Solution {
    
	private class Freq implements Comparable{
		int num,freq;
		public Freq(int num,int freq){
			this.num=num;
			this.freq=freq;
		}
		@Override
		public int compareTo(Freq another) {
			if(this.freq>another.freq){
				return 1;
			}else if(this.freq topKFrequent(int[] nums, int k) {
		TreeMap map=new TreeMap<>();
		for(int num:nums){
			if(!map.containsKey(num)){
				map.put(num, 1);
			}else{
				map.put(num, map.get(num)+1);
			}
		}
        //最小堆
		PriorityQueue queue=new PriorityQueue();
		for(int num:map.keySet()){//O(n)
			if(queue.size()queue.peek().freq){
				queue.remove();							//O(logm)
				queue.add(new Freq(num,map.get(num)));//O(logm)
			}
		}
		LinkedList list=new LinkedList<>();
		while(!queue.isEmpty()){
			list.add(queue.remove().num);
		}
		return list;
	}

}

 

你可能感兴趣的:(LeetCode编程题)