gpt4 book ai didi

go - 在 Go 中查看优先队列的顶部?

转载 作者:行者123 更新时间:2023-12-01 20:18:48 25 4
gpt4 key购买 nike

我试图使用 heap 实现一个示例程序,我可以 PushPop从堆。我能够实现 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 中代码片段中的注释功能。
我想记录优先级队列的顶部,而不实际弹出它。我怎么能去那个?

最佳答案

您可以“窥视”pop() 的元素将通过返回底层数组的第一个元素来返回。

关于go - 在 Go 中查看优先队列的顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63328886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com