[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.

For example,
Given [[0, 30],[5, 10],[15, 20]],
return false.

给一个会议时间区间的数组,问一个人是否能参加所有的会议。就是求这些区间是否有交集,如果有就不能参加所有的会,没有交集就可以参加所有的会议。

解法:先把区间按开始时间排序,然后判断每一个区间的开始时间是否比前一个会议的结束时间早,如果有,就是时间重叠。

Java:

public boolean canAttendMeetings(Interval[] intervals) {
    Arrays.sort(intervals, new Comparator<Interval>(){
        public int compare(Interval a, Interval b){
            return a.start-b.start;
        }
    });
 
    for(int i=0; i<intervals.length-1; i++){
        if(intervals[i].end>intervals[i+1].start){
            return false;
        }
    }
 
    return true;
} 

Python:

# Time:  O(nlogn)
# Space: O(n)
#
# Definition for an interval.
# class Interval:
#     def __init__(self, s=0, e=0):
#         self.start = s
#         self.end = e

class Solution:
    # @param {Interval[]} intervals
    # @return {boolean}
    def canAttendMeetings(self, intervals):
        intervals.sort(key=lambda x: x.start)

        for i in xrange(1, len(intervals)):
            if intervals[i].start < intervals[i-1].end:
                return False
        return True  

C++:

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

 

类似题目:

[LeetCode] 253. Meeting Rooms II 会议室 II

 

All LeetCode Questions List 题目汇总

 

posted @ 2018-03-16 05:43  轻风舞动  阅读(1331)  评论(0编辑  收藏  举报