| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | 
							- type pair struct {
 
- 	word string
 
- 	freq int
 
- }
 
- type minHeap []pair
 
- func (h minHeap) Len() int { return len(h) }
 
- func (h minHeap) Less(i, j int) bool {
 
- 	if h[i].freq != h[j].freq {
 
- 		return h[i].freq < h[j].freq
 
- 	}
 
- 	return h[j].word < h[i].word
 
- }
 
- func (h minHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
 
- func (h *minHeap) Push(x interface{}) {
 
- 	*h = append(*h, x.(pair))
 
- }
 
- func (h *minHeap) Pop() interface{} {
 
- 	l := h.Len()
 
- 	x := (*h)[l-1]
 
- 	*h = (*h)[:l-1]
 
- 	return x
 
- }
 
- func topKFrequent(words []string, k int) []string {
 
- 	m := make(map[string]int)
 
- 	for _, word := range words {
 
- 		m[word]++
 
- 	}
 
- 	i := 0
 
- 	var h minHeap
 
- 	for word, freq := range m {
 
- 		heap.Push(&h, pair{word, freq})
 
- 		i++
 
- 		if k < i {
 
- 			heap.Pop(&h)
 
- 		}
 
- 	}
 
- 	res := make([]string, k)
 
- 	for i = k - 1; 0 <= i; i-- {
 
- 		p := heap.Pop(&h).(pair)
 
- 		res[i] = p.word
 
- 	}
 
- 	return res
 
- }
 
 
  |