自学内容网 自学内容网

【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)!