LeetCode - Meeting Rooms(會議室)
題目描述
給定一個由會議時間區間組成的數組 intervals
,其中每個區間 intervals[i] = [start, end]
表示會議的開始和結束時間,請判斷一個人是否可以參加所有會議。如果任何兩個會議之間有重疊,則返回 False
,否則返回 True
。
範例:
1
2
3
4
5
6
7
輸入:intervals = [[0,30],[5,10],[15,20]]
輸出:False
解釋:會議 [0,30] 與 [5,10] 和 [15,20] 有重疊。
輸入:intervals = [[7,10],[2,4]]
輸出:True
解釋:會議沒有重疊。
解法思路
要判斷是否可以參加所有會議,關鍵在於檢查會議時間區間之間是否有重疊。具體步驟如下:
按開始時間排序:首先將會議區間根據開始時間進行排序,這樣可以確保相鄰的會議之間只需檢查結束和開始時間是否重疊。
檢查重疊:遍歷排序後的會議列表,檢查每個會議區間是否與下一個會議區間重疊。如果當前會議的結束時間大於下一個會議的開始時間,則說明會議時間有重疊,無法參加所有會議,返回
False
。如果遍歷結束沒有發現重疊,則返回True
。
範例代碼
以下是 Python 的實現:
1
2
3
4
5
6
7
8
9
10
11
def canAttendMeetings(intervals):
# 1. 將會議時間按照開始時間排序
intervals.sort(key=lambda x: x[0])
# 2. 檢查是否有重疊
for i in range(1, len(intervals)):
# 如果前一個會議的結束時間大於當前會議的開始時間,則會議重疊
if intervals[i-1][1] > intervals[i][0]:
return False
return True
代碼解析
- 排序會議時間區間:根據會議開始時間排序,這樣可以逐一檢查相鄰會議是否有重疊。
- 檢查重疊:遍歷排序後的區間列表,檢查相鄰會議是否重疊。如果發現任何一組會議的結束和開始時間重疊,則返回
False
。 - 返回結果:如果遍歷結束時沒有發現重疊,則返回
True
。
時間和空間複雜度
- 時間複雜度:O(n log n),主要來自於排序操作,其中
n
是會議區間的數量。 - 空間複雜度:O(1),因為只使用了常數額外空間進行比較和遍歷。
本文章以 CC BY 4.0 授權