-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path692.go
106 lines (102 loc) · 2.53 KB
/
692.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package main
import (
"container/heap"
"fmt"
)
func main() {
fmt.Println(topKFrequentWords([]string{"the", "day", "is", "is", "day", "the", "the", "sunny", "day", "is"}, 3))
}
//给一非空的单词列表,返回前 k 个出现次数最多的单词。
//
//返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。
//
//示例 1:
//
//输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2
//输出: ["i", "love"]
//解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。
// 注意,按字母顺序 "i" 在 "love" 之前。
//
//
//示例 2:
//
//输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4
//输出: ["the", "is", "sunny", "day"]
//解析: "the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,
// 出现次数依次为 4, 3, 2 和 1 次。
//
//
//注意:
//
//假定 k 总为有效值, 1 ≤ k ≤ 集合元素数。
//输入的单词均由小写字母组成。
//
//链接:https://leetcode-cn.com/problems/top-k-frequent-words
//type Item struct {
// value string
// priority int
// index int
//}
//
//type KSmallestPairsPQ []*Item
//
//func (pq KSmallestPairsPQ) Len() int { return len(pq) }
//
//func (pq KSmallestPairsPQ) Less(i, j int) bool {
// if pq[i].priority == pq[j].priority {
// return pq[i].value < pq[j].value
// }
// return pq[i].priority > pq[j].priority
//}
//
//func (pq KSmallestPairsPQ) Swap(i, j int) {
// pq[i], pq[j] = pq[j], pq[i]
// pq[i].index = i
// pq[j].index = j
//}
//
//func (pq *KSmallestPairsPQ) Push(x interface{}) {
// n := len(*pq)
// item := x.(*Item)
// item.index = n
// *pq = append(*pq, item)
//}
//
//func (pq *KSmallestPairsPQ) Pop() interface{} {
// old := *pq
// n := len(old)
// item := old[n-1]
// item.index = -1
// *pq = old[0 : n-1]
// return item
//}
//
//func (pq *KSmallestPairsPQ) update(item *Item, value string, priority int) {
// item.value = value
// item.priority = priority
// heap.Fix(pq, item.index)
//}
//
//func topKFrequentWords(words []string, k int) []string {
// timesMap := make(map[string]int, 0)
// for _, word := range words {
// timesMap[word]++
// }
// pq := make(KSmallestPairsPQ, len(timesMap))
// i := 0
// for value, priority := range timesMap {
// pq[i] = &Item{
// value: value,
// priority: priority,
// index: i,
// }
// i++
// }
// heap.Init(&pq)
// result := make([]string, 0)
// for k > 0 {
// result = append(result, heap.Pop(&pq).(*Item).value)
// k--
// }
// return result
//}