获得徽章 0
看到了雷军的一篇采访,突哗然大嘘,想想日后的目标,似乎,又多了几份玩味
评论
终于绿名了,感谢自己这么久以来的坚持,从最开始的啥也不会到现在的(啥也不会)略知一二,希望天下的努力都有回报。
KreanXie于2023-08-10 13:30发布的图片
评论
一、题目链接



leetcode.cn



二、题目简介



会议室问题,给定 n 个会议的开始时间和结束时间,同一时间内一间会议室只能开一场会,问开完所有会议最少需要多少个会议室



三、涉及知识点



排序



四、算法分析



解法一:排序
我们首先对intervals的首项也就是开始时间排序,然后枚举所有时刻,也就是从 1 到最后一个会议结束的时刻,如果当前时刻有一个会议开始了,我们将cur+1,如果有一个会议结束了,我们将cur-1,然后每个时刻都更新ret即可
时间复杂度O(m),m为最后一个会议开完的时刻



五、源码解析



Golang
func minMeetingRooms(intervals [][]int) int {
n := len(intervals)
sort.Slice(intervals, func(i, j int) bool {
if intervals[i][0] == intervals[j][0] {
return intervals[i][1] < intervals[j][1]
}
return intervals[i][0] < intervals[j][0]
})
maxt := intervals[n-1][1]
idx := 0
ret := 0
cur := 0
end := make(map[int]int)
for i := 0; i <= maxt; i++ {
if _, ok := end[i]; ok {
cur -= end[i]
}
for idx < n && intervals[idx][0] <= i {
cur++
ret = max(ret, cur)
end[intervals[idx][1]]++
idx++
}
}
return ret
}

func max(a, b int) int {
if a > b {
return a
} else {
return b
}
}



六、FAQ
展开
评论
下一页
个人成就
文章被点赞 3
文章被阅读 2,207
掘力值 134
收藏集
1
关注标签
3
加入于