func(this *Deque) Pop(value int) { if !this.Empty() && value == this.Front() { this.queue = this.queue[1:] } }
funcmaxSlidingWindow(nums []int, k int) []int { deque := Constructor() var result []int for i := 0; i < k; i++ { deque.Push(nums[i]) } result = append(result, deque.Front()) for i := k; i < len(nums); i++ { deque.Pop(nums[i-k]) deque.Push(nums[i]) result = append(result, deque.Front()) } return result }
// 优先队列中的条目 type Element struct { Num int Count int } // 比较器函数,根据Count降序 funcbyPriority(a, b interface{})int { priorityA := a.(Element).Count priorityB := b.(Element).Count return -utils.IntComparator(priorityA, priorityB) // "-" 代表降序 }
functopKFrequent(nums []int, k int) []int { // 构建键值对 maps := map[int]int{} for _, v := range nums { maps[v]++ } // 初始化优先队列 pq := priorityqueue.NewWith(byPriority) for k, v := range maps { pq.Enqueue(Element{ Num: k, Count: v, }) } var result []int // 取前k个元素保存到result中 for i := 0; i < k; i++ { value, _ := pq.Dequeue() result = append(result, value.(Element).Num) } return result }