692. Top K Frequent Words - cocoder39/coco39_LC GitHub Wiki

692. Top K Frequent Words

functions like sorted(), sort(), heapq module use __lt__for ordering so we just need to override lt to build custom sort

class Pair:
    def __init__(self, frequence, word):
        self.frequence = frequence
        self.word = word
    
    def __lt__(self, pair):
        return self.frequence < pair.frequence or (self.frequence == pair.frequence and self.word > pair.word)

class Solution:
    def topKFrequent(self, words: List[str], k: int) -> List[str]:
        counter = Counter(words)
        min_heap = []
        for word, freq in counter.items():
            heapq.heappush(min_heap, Pair(freq, word))
            if len(min_heap) > k:
                heapq.heappop(min_heap)
        
        res = collections.deque()
        while min_heap:
            pair = heapq.heappop(min_heap)
            res.appendleft(pair.word)
        return res

==========================

public List<String> topKFrequent(String[] words, int k) {
        Map<String, Integer> mp = new HashMap<>();
        for (String word : words) {
            mp.put(word, mp.getOrDefault(word, 0) + 1);
        }
        
        PriorityQueue<Map.Entry<String, Integer>> minHeap = 
            new PriorityQueue<>((entry1, entry2) -> (entry1.getValue() == entry2.getValue()
                                                     ? entry2.getKey().compareTo(entry1.getKey()) 
                                                     : entry1.getValue() - entry2.getValue()));
        
        for (Map.Entry entry : mp.entrySet()) {
            minHeap.add(entry);
            if (minHeap.size() > k) {
                minHeap.poll();
            }
        }
        
        List<String> res = new LinkedList<>();
        while (!minHeap.isEmpty()) {
            res.add(minHeap.poll().getKey());
        }
        Collections.reverse(res);
        return res;
    }
⚠️ **GitHub.com Fallback** ⚠️