[LeetCode] 252. Meeting Rooms 會議室


 

Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), determine if a person could attend all meetings.

Example 1:

Input: [[0,30],[5,10],[15,20]]
Output: false

Example 2:

Input: [[7,10],[2,4]]
Output: true

NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

 

這道題給了我們一堆會議的時間,問能不能同時參見所有的會議,這實際上就是求區間是否有交集的問題,那么最簡單暴力的方法就是每兩個區間比較一下,看是否有 overlap,有的話直接返回 false 就行了。比較兩個區間a和b是否有 overlap,可以檢測兩種情況,如果a的起始位置大於等於b的起始位置,且此時a的起始位置小於b的結束位置,則一定有 overlap,另一種情況是a和b互換個位置,如果b的起始位置大於等於a的起始位置,且此時b的起始位置小於a的結束位置,那么一定有 overlap,參見代碼如下:

 

解法一:

class Solution {
public:
    bool canAttendMeetings(vector<vector<int>>& intervals) {
        for (int i = 0; i < intervals.size(); ++i) {
            for (int j = i + 1; j < intervals.size(); ++j) {
                if ((intervals[i][0] >= intervals[j][0] && intervals[i][0] < intervals[j][1]) || (intervals[j][0] >= intervals[i][0] && intervals[j][0] < intervals[i][1])) return false;
            }
        }
        return true;
    }
};

 

我們可以先給所有區間排個序,用起始時間的先后來排,然后從第二個區間開始,如果開始時間早於前一個區間的結束時間,則說明會議時間有沖突,返回 false,遍歷完成后沒有沖突,則返回 true,參見代碼如下:

 

解法二:

class Solution {
public:
    bool canAttendMeetings(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b){return a[0] < b[0];});
        for (int i = 1; i < intervals.size(); ++i) {
            if (intervals[i][0] < intervals[i - 1][1]) {
                return false;
            }
        }
        return true;
    }
};

 

Github 同步地址:

https://github.com/grandyang/leetcode/issues/252

 

類似題目:

Merge Intervals

Meeting Rooms II

 

參考資料:

https://leetcode.com/problems/meeting-rooms/

https://leetcode.com/problems/meeting-rooms/discuss/67782/C%2B%2B-sort

https://leetcode.com/problems/meeting-rooms/discuss/67786/AC-clean-Java-solution

 

LeetCode All in One 題目講解匯總(持續更新中...)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM