窥探 Go 中优先级队列的顶部?
Peeking into the top of the Priority Queue in Go?
我正在尝试使用 heap 实现示例程序,并且我能够从堆中 Push
和 Pop
。我能够实现 Push 和 Pop 方法并按如下方式使用它们:
import "container/heap"
type Meeting struct {
start int
end int
}
func NewMeeting(times []int) *Meeting {
return &Meeting{start: times[0], end: times[1] }
}
type PQ []*Meeting
func (pq PQ) Len() int {
return len(pq)
}
func (pq PQ) Less(i, j int) bool {
return pq[i].end < pq[j].end
}
func (pq PQ) Swap(i, j int) {
pq[i], pq[j] = pq[j], pq[i]
}
func (pq *PQ) Push(x interface{}) {
item := x.(*Meeting)
*pq = append(*pq, item)
}
func (pq *PQ) Pop() interface{} {
old := *pq
n := len(old)
item := old[n-1]
old[n-1] = nil // avoid memory leak
*pq = old[0 : n-1]
return item
}
func minMeetingRooms(intervals [][]int) int {
pq := make(PQ, 0)
heap.Init(&pq)
heap.Push(&pq, NewMeeting([]int{1, 3}))
heap.Push(&pq, NewMeeting([]int{1, 2}))
fmt.Println(heap.Pop(&pq).(*Meeting)) // I would like to log this without popping prom the Queue
return 0
}
请参阅 minMeetingRooms
函数中代码段中的注释。
我想记录优先队列的顶部,而不是实际弹出它。我该怎么做?
您可以通过 return 底层数组的第一个元素来“查看”pop()
将 return 的元素。 (即 pq[0]
)
fmt.Println(pq[0])
你需要使用第一个元素来查看
我正在尝试使用 heap 实现示例程序,并且我能够从堆中 Push
和 Pop
。我能够实现 Push 和 Pop 方法并按如下方式使用它们:
import "container/heap"
type Meeting struct {
start int
end int
}
func NewMeeting(times []int) *Meeting {
return &Meeting{start: times[0], end: times[1] }
}
type PQ []*Meeting
func (pq PQ) Len() int {
return len(pq)
}
func (pq PQ) Less(i, j int) bool {
return pq[i].end < pq[j].end
}
func (pq PQ) Swap(i, j int) {
pq[i], pq[j] = pq[j], pq[i]
}
func (pq *PQ) Push(x interface{}) {
item := x.(*Meeting)
*pq = append(*pq, item)
}
func (pq *PQ) Pop() interface{} {
old := *pq
n := len(old)
item := old[n-1]
old[n-1] = nil // avoid memory leak
*pq = old[0 : n-1]
return item
}
func minMeetingRooms(intervals [][]int) int {
pq := make(PQ, 0)
heap.Init(&pq)
heap.Push(&pq, NewMeeting([]int{1, 3}))
heap.Push(&pq, NewMeeting([]int{1, 2}))
fmt.Println(heap.Pop(&pq).(*Meeting)) // I would like to log this without popping prom the Queue
return 0
}
请参阅 minMeetingRooms
函数中代码段中的注释。
我想记录优先队列的顶部,而不是实际弹出它。我该怎么做?
您可以通过 return 底层数组的第一个元素来“查看”pop()
将 return 的元素。 (即 pq[0]
)
fmt.Println(pq[0])
你需要使用第一个元素来查看