LeetCode 347 优先队列

import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.TreeMap;
import java.util.Comparator;


public class L347 {
//	private class Freq{  // implements Comparable  接口
//		public int e, freq;
//		
//		public Freq(int e, int freq) {
//			this.e = e;
//			this.freq = freq;
//		}
//		public int compareTo(Freq another) {
//			if(this.freq < another.freq)
//				return -1;
//			else if (this.freq > another.freq)
//				return 1;
//			else
//				return 0;
//		}
//	}
	
//	private class FreqComparator implements Comparator{
//		
//		@Override
//		public int compare(Freq a, Freq b) {
//			return a.freq - b.freq;
//		}
//	}
	
    public List<Integer> topKFrequent(int[] nums, int k) {
        final TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
        for(int num: nums) {
        	if(map.containsKey(num))
        		map.put(num, map.get(num) + 1);
        	else
        		map.put(num, 1);
        }
        
//        PriorityQueue pq = new PriorityQueue(new Comparator() {
//
//			public int compare(Integer a, Integer b) {
//				// TODO 自动生成的方法存根
//				return map.get(a) - map.get(b);
//			}
//		});
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>(
        		(a, b) -> map.get(a) - map.get(b)  // 拉姆达表达式从1.8开始
        );
        for(int key: map.keySet()) {
        	if(pq.size() < k)
        		pq.add(key);
        	else if(map.get(key) > map.get(pq.peek())) {
        		pq.remove();
        		pq.add(key);
        	}
        }
        LinkedList<Integer> res = new LinkedList<Integer>();
        while(!pq.isEmpty())
        	res.add(pq.remove());
        return res;
    }
}

你可能感兴趣的:(LeetCode)