题目描述:
给定一系列的会议时间间隔,包括起始和结束时间[[s1,e1],[s2,e2],…(si < ei),确定一个人是否可以参加所有会议。
算法思路 :
按照区间start从小到大排序,满足题目要求的区间应该是没有交集的。所以要比较看当前区间end是否大于下一个区间start, 并且不同区间start应该不相同。
代码实现(Java):
/**
* Definition of Interval:
* public classs Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*
public boolean canAttendMeetings(List<Interval> intervals) {
// Write your code here
// 1 判断是否list是否为空
if (intervals == null || intervals.size() == 0) {
return true;
}
// 2 按照区间的start升序
Collections.sort(intervals, new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
return o1.start - o2.start;
}
});
// 3 判断是否符合要求
for (int i = 0; i < intervals.size() - 1; i++) {
// 3.1 当两个相邻区间start相同返回false
if (intervals.get(i).start == intervals.get(i + 1).start) {
return false;
}
// 3.2 当前区间的end大于下一区间的start返回false
if (intervals.get(i).end > intervals.get(i + 1).start) {
return false;
}
}
return true;
}