【LeetCode】每日一题 2024_9_30 座位预约管理系统(堆)
前言
每天和你一起刷 LeetCode 每日一题~
LeetCode 启动!
题目:座位预约管理系统
代码与解题思路
type SeatManager struct {
sort.IntSlice // 默认最小堆
}
// 非常常规的一道堆的题目,建一个最小堆
func Constructor(n int) SeatManager {
m := SeatManager{make([]int, n)}
for i := range m.IntSlice {
m.IntSlice[i] = i+1 // 座位号从 1 开始
}
return m
}
// 返回最小编号的座位(把堆顶出堆)
func (m *SeatManager) Reserve() int {
return heap.Pop(m).(int)
}
// 添加一个可预约座位,将 seatNumber 入堆
func (m *SeatManager) Unreserve(seatNumber int) {
heap.Push(m, seatNumber)
}
func (m *SeatManager) Push(v any) { m.IntSlice = append(m.IntSlice, v.(int)) }
func (m *SeatManager) Pop() any { a := m.IntSlice; v := a[len(a)-1]; m.IntSlice = a[:len(a)-1]; return v }
/**
* Your SeatManager object will be instantiated and called as such:
* obj := Constructor(n);
* param_1 := obj.Reserve();
* obj.Unreserve(seatNumber);
*/
今天这道题可以说是非常常规了,只要是学过数据结构,学过堆/优先级队列(priority_queue)应该都能看出来,这里就不过多赘述了,注释也非常详细
但是,自从换上 Golang 后,每次写堆相关的题都是痛苦面具,因为 Golang 的堆非常麻烦,STL 比这玩意好用太多,但 . . . 来都来了,还是好好练习一下
今天这道题也算是可以当做 Golang 堆的一个简便实现的模版了
视频实况
【【LeetCode】每日一题 2024_9_30 座位预约管理系统(堆)】
每天进步一点点
可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。
原文地址:https://blog.csdn.net/Locky136/article/details/142651762
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!