meeting room I & II
Posted 北叶青藤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了meeting room I & II相关的知识,希望对你有一定的参考价值。
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.
这题和求解有多少架飞机在空中一样。
1 public class Solution { 2 public boolean canAttendMeetings(Interval[] intervals) { 3 List<TimePoint> list = new ArrayList<TimePoint>(); 4 5 for (Interval interval : intervals) { 6 list.add(new TimePoint(interval.start, true)); 7 list.add(new TimePoint(interval.end, false)); 8 } 9 10 Collections.sort(list, new Comparator<TimePoint>() { 11 public int compare(TimePoint t1, TimePoint t2) { 12 if (t1.time < t2.time) { 13 return -1; 14 } else if (t1.time > t2.time) { 15 return 1; 16 } else { 17 if (t1.isStart) { 18 return 1; 19 } else { 20 return -1; 21 } 22 } 23 } 24 }); 25 int count = 0; 26 for (TimePoint t : list) { 27 if (t.isStart) { 28 count++; 29 if (count == 2) return false; 30 } else { 31 count--; 32 } 33 } 34 return true; 35 } 36 } 37 38 class TimePoint { 39 int time; 40 boolean isStart; 41 42 public TimePoint(int time, boolean isStart) { 43 this.time = time; 44 this.isStart = isStart; 45 } 46 }
网上看到一个更简单的方法:先sort intervals, 然后看俩个相邻的点是否有重合。
1 public boolean canAttendMeetings(Interval[] intervals) { 2 Arrays.sort(intervals, new Comparator<Interval>(){ 3 public int compare(Interval a, Interval b){ 4 return a.start-b.start; 5 } 6 }); 7 8 for(int i=0; i<intervals.length-1; i++){ 9 if(intervals[i].end>intervals[i+1].start){ 10 return false; 11 } 12 } 13 return true; 14 }
Meeting Rooms II
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...]
(si < ei), find the minimum number of conference rooms required.
For example,
Given [[0, 30],[5, 10],[15, 20]]
,
return 2
.
方法和第一种相似。
1 public class Solution { 2 public int minMeetingRooms(Interval[] intervals) { 3 List<TimePoint> list = new ArrayList<TimePoint>(); 4 5 for (Interval interval : intervals) { 6 list.add(new TimePoint(interval.start, true)); 7 list.add(new TimePoint(interval.end, false)); 8 } 9 10 Collections.sort(list, new Comparator<TimePoint>() { 11 public int compare(TimePoint t1, TimePoint t2) { 12 if (t1.time < t2.time) { 13 return -1; 14 } else if (t1.time > t2.time) { 15 return 1; 16 } else { 17 if (t1.isStart) { 18 return 1; 19 } else { 20 return -1; 21 } 22 } 23 } 24 }); 25 int count = 0; 26 int max = 0; 27 for (TimePoint t : list) { 28 if (t.isStart) { 29 count++; 30 max = Math.max(count, max); 31 } else { 32 count--; 33 } 34 } 35 return max; 36 } 37 } 38 39 class TimePoint { 40 int time; 41 boolean isStart; 42 43 public TimePoint(int time, boolean isStart) { 44 this.time = time; 45 this.isStart = isStart; 46 } 47 }
以上是关于meeting room I & II的主要内容,如果未能解决你的问题,请参考以下文章