| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | type pair struct {	word string	freq int}type minHeap []pairfunc (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}
 |