虽然直接枚举可以解决这个问题:
class Solution {
public boolean canAttendMeetings(int[][] intervals) {
int start = 0;
int end = 0;
for (int i = 0; i < intervals.length; i++) {
int[] temp = intervals[i];
for (int j = 0; j < intervals.length; j++) {
if (j != i) {
if ((intervals[j][0] > temp[0] && intervals[j][0] < temp[1]) ||
(intervals[j][1] > temp[0] && intervals[j][0] < temp[1]) ) {
return false;
}
}
}
}
return true;
}
}
但是做之前我觉得肯定不是用枚举来做的,就只先试了下。
class Solution {
public boolean canAttendMeetings(int[][] intervals) {
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
for (int i = 1; i < intervals.length; i++) {
if ((intervals[i][0] >= intervals[i - 1][0] &&
(intervals[i][0] < intervals[i - 1][1])) ||
((intervals[i][1] >= intervals[i - 1][0])
&& (intervals[i][1] < intervals[i - 1][1]))) {
return false;
}
}
return true;
}
}
先排序再对排序后的内容从前到后遍历,根据后一个与前一个的区间是否重叠就可以得出是否满足要求!o1[0] - o2[0]为升序,反为降序,但都结果相同。
答案可以用if (intervals[i][1] > intervals[i + 1][0])
即前一个最大的大于后一个最小的,就说明重叠。