力扣252 / lintcode920 / 字节原题 会议室
https://www.lintcode.com/problem/meeting-rooms/description
给定一系列的会议时间间隔,包括起始和结束时间[[s1,e1],[s2,e2],…(si < ei),确定一个人是否可以参加所有会议。
示例1
1 2 3 4
| 输入: intervals = [(0,30),(5,10),(15,20)] 输出: false 解释: (0,30), (5,10) 和 (0,30),(15,20) 这两对会议会冲突
|
示例2
1 2 3 4
| 输入: intervals = [(5,8),(9,15)] 输出: true 解释: 这两个时间段不会冲突
|
思路:曾经做过合并区间,用了两种方法,当时提过一定要以代码量少/速度快为前提(这是笔试题),因此一定要按开始时间排序,排序完就简单多了,遍历判断后一个的开始时间是否大于前一个的结束时间
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 27 28 29 30 31 32 33 34
| public class nine_two_zero_会议室 {
@Test public void test(){ List<Interval> intervals = new ArrayList<>(); intervals.add(new Interval(5,8)); intervals.add(new Interval(9,20)); boolean res = canAttendMeetings(intervals); System.out.println(res); }
public boolean canAttendMeetings(List<Interval> intervals) { if (intervals == null || intervals.size() == 0){ return true; } Collections.sort(intervals, (o1, o2) -> (o1.start - o2.start)); int preEnd = -1; for (Interval interval : intervals) { if (interval.start < preEnd){ return false; } preEnd = interval.end; } return true; }
public class Interval { int start, end; Interval(int start, int end) { this.start = start; this.end = end; } } }
|
其他排序的题目点击这里