Problem description:

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:

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

Example 2:

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

Solution:

Use lambda function to sort, if previous meeting is longer than the latter meeting, then the person can not attend all meetings.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
bool canAttendMeetings(vector<Interval>& intervals) {
sort(intervals.begin(), intervals.end(), [&](Interval a, Interval b){return a.start< b.start;});
for(int i= 1; i< intervals.size(); i++){
if(intervals[i-1].end > intervals[i].start)
return false;
}
return true;
}
};

time complexity: $O(nlogn)$, sorting
space complexity: $O(1)$
reference: