LeetCode 253 會議室②
阿新 • • 發佈:2022-02-19
給你一個會議時間安排的陣列 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,如此可以將會議的開始和結束時間拆成兩個型別,統一排序,進行一次遍歷,遍歷過程中最大的會議數量即是所需要的最少的會議室的數量。
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 }