常见的区间问题大多都是要寻找区间重复的地方在哪里,我们来看下面这张图
设两个区间为分别为A和B,当A区间首部大于B区间首部并且小于或者等于B区间的尾部时,我们就可以判断AB两区间有重复的地方
拿LeetCode252.来说,这道题目叫我们在包含有一堆会议时间的数组里判断是否有重复区间,那我们只要比较一个会议的开始时间和上一个会议的结束时间就OK了。如果前者<后者,那么就返回true,否则就返回false
代码如下:
public boolean canAttendMeetings(int[][] intervals) {
// 将区间按照会议开始实现升序排序
Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
// 遍历会议,如果下一个会议在前一个会议结束之前就开始了,返回 false。
for (int i = 1; i < intervals.length; i++) {
if (intervals[i][0] < intervals[i - 1][1]) {
return false;
}
}
return true;
}