给定一系列的会议时间间隔,包括起始和结束时间[[s1,e1],[s2,e2],...(si <ei),确定一个人是否可以参加所有会议。
样例
给定区间= [[0,30],[5,10],[15,20],返回假。
解题思路:
先排序,后比较每个区间有无交叉重叠区域即可。
注意写Comparator接口时,返回-1的条件即为期望排序结果,如本题中返回-1的条件即是升序
/**
* Definition of Interval:
* public classs Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/
public class Solution {
/**
* @param intervals: an array of meeting time intervals
* @return: if a person could attend all meetings
*/
public boolean canAttendMeetings(List<Interval> intervals) {
// Write your code here
//先按start升序排序,再按end升序排序
Collections.sort(intervals, new Comparator<Interval>(){
public int compare(Interval i1, Interval i2){
if(i1.start < i2.start)
return -1;
else if(i1.start > i2.start)
return 1;
else{
if(i1.end < i2.end)
return -1;
else if(i1.end > i2.end)
return 1;
else
return 0;
}
}
});
//若两段区间有交叉重叠即false
int max = 0;
for(Interval i : intervals){
if(i.start < max)
return false;
else
max = i.end;
}
return true;
}
}
版本2:
/**
* Definition of Interval:
* public classs Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/
public class Solution {
/**
* @param intervals: an array of meeting time intervals
* @return: if a person could attend all meetings
*/
public boolean canAttendMeetings(List<Interval> intervals) {
// Write your code here
//先按start升序排序,再按end升序排序
Collections.sort(intervals, new Comparator<Interval>(){
public int compare(Interval i1, Interval i2){
if(i1.start != i2.start)
return i1.start - i2.start;
return i1.end - i2.end;
}
});
//若两段区间有交叉重叠即false
int max = 0;
for(Interval i : intervals){
if(i.start < max)
return false;
else
max = i.end;
}
return true;
}
}