LeetCode 253 会议室②

给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,返回 所需会议室的最小数量 。

 

示例 1:

输入:intervals = [[0,30],[5,10],[15,20]]
输出:2

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/meeting-rooms-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

思路:考虑转换为公交上下车,车上最多有多少人的问题,其实本质是一样的,我们只需要知道有哪些会议时间有冲突,即同一时刻在开的会议数量的最大值。可以有如下设计,会议开始时会议数量+1,会议结束时会议数量-1,如此可以将会议的开始和结束时间拆成两个类型,统一排序,进行一次遍历,遍历过程中最大的会议数量即是所需要的最少的会议室的数量。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
func minMeetingRooms(intervals [][]int) int {
    nodes := make(Nodes, 0, len(intervals)*2)
    for _, interval := range intervals {
        nodes = append(nodes, Node{
            time: interval[0],
            _type: 1,
        }, Node{
            time: interval[1],
            _type: -1,
        })
    }
    sort.Sort(nodes)
    ret := 0
    max := 0
    for _, node := range nodes {
        ret += node._type
        if max<ret {
            max = ret
        }
    }
    return max
}
 
type Node struct {
    time int
    _type int
}
 
type Nodes []Node
 
func (n Nodes) Len() int {
    return len(n)
}
 
func (n Nodes) Swap(i, j int) {
    n[i], n[j] = n[j], n[i]
}
 
func (n Nodes) Less(i, j int) bool {
    if n[i].time == n[j].time {
        return n[i]._type == -1
    }
    return n[i].time<n[j].time
}

  

posted @   丶Blank  阅读(225)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2013-02-19 字符串内排序
2013-02-19 成绩排序
点击右上角即可分享
微信分享提示