[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
return
Given
[[0, 30],[5, 10],[15, 20]]
,return
false
.
Thought process:
If a meeting's end time is larger than another's start time, a person cannot attend both meetings. So the idea is to sort the array based on start time. Then we can iterate through the array to check if any two consecutive meetings overlap.
Solution (C++):
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /** * 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(), [](const Interval& i1, const Interval& i2) -> bool { return i1.start < i2.start; }); for (size_t i = 1; i < intervals.size(); i++) { if (intervals[i - 1].end > intervals[i].start) { return false; } } return true; } }; |
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */ public class Solution { public boolean canAttendMeetings(Interval[] intervals) { Arrays.sort(intervals, new Comparator<Interval>() { public int compare(Interval i1, Interval i2) { return i1.start - i2.start; } }); for (int i = 0; i < intervals.length - 1; i++) { if (intervals[i].end > intervals[i + 1].start) { return false; } } return true; } } |
Time complexity:
O(nlogn) because of sorting.
A Java 8 functional programming solution using IntStream:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */ class Solution { public boolean canAttendMeetings(Interval[] intervals) { Arrays.sort(intervals, (a, b) -> a.start - b.start); return !IntStream.range(1, intervals.length).anyMatch(i -> intervals[i].start < intervals[i - 1].end); } } |
Comments
Post a Comment