快轉到主要內容
leetcode 252 - Meeting Rooms

leetcode 252 - Meeting Rooms

·
類別 
Leetcode
標籤 
Java Leetcode Easy Blind75
Eason Chiu
作者
Eason Chiu
一個不做筆記就容易忘記的工程師
目錄

題目
#

leetcode 252 - Meeting Rooms(題目說明請點連結)

題目簡述
#

判斷是否可以參加所有會議。

Example 1:

Input: intervals = [[0,30],[5,10],[15,20]]
Output: false
Explanation: 該人員無法參加所有會議,因為會議 [0,30] 和 [5,10] 之間存在衝突。會議 [0,30] 在時間 30 結束,而會議 [5,10] 在時間 5 開始,這表示它們有重疊。

Example 2:

Input: intervals = [[7,10],[2,4]]
Output: true
Explanation: 該人員可以參加所有會議,因為會議之間沒有重疊。

解題思路
#

輸入為一個會議時間區間的陣列,輸出為是否可以參加所有會議。
這題可以用排序的解法去實作。


以下面為例子:

將所有會議按照開始時間排序,然後檢查相鄰的會議是否有重疊。

步驟 會議狀態 操作說明
Step 1 [[0,30],[5,10],[15,20]] 原始會議陣列
Step 2 [[0,30],[5,10],[15,20]] 按照開始時間排序(已經排序)
Step 3 比較 [0,30] 和 [5,10] 前一個會議結束時間(30) > 當前會議開始時間(5)
發現重疊,返回 false

完整程式碼
#

java
class Solution {
    public boolean canAttendMeetings(int[][] intervals) {
        // 如果沒有會議或只有一個,直接返回 true
        if (intervals == null || intervals.length <= 1) {
            return true;
        }

        // 按照每個會議的開始時間排序
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);

        // 檢查是否有重疊的會議
        for (int i = 1; i < intervals.length; i++) {
            // 若前一個會議的結束時間 > 當前會議的開始時間,就表示重疊
            if (intervals[i - 1][1] > intervals[i][0]) {
                return false;
            }
        }

        return true;
    }
}

時間複雜度
#

  • 時間複雜度:O(n log n),其中 n 是會議的數量,主要時間花在排序上。
  • 空間複雜度:O(1),只使用了常數額外空間。

相關文章

leetcode 1047 - Remove All Adjacent Duplicates In String
類別 
Leetcode
標籤 
Java Leetcode Easy Two Pointers Problem
leetcode 11 - Container With Most Water
類別 
Leetcode
標籤 
Java Leetcode Medium Two Pointers Problem Blind75
leetcode 15 - 3Sum
類別 
Leetcode
標籤 
Java Leetcode Medium Two Pointers Problem Blind75