目录
[435 无重叠区间](#435 无重叠区间)
[763 划分字母区间](#763 划分字母区间)
[56 合并区间](#56 合并区间)
435 无重叠区间
将intervals数组按照左端点进行升序排序。
设置变量len标志此时新加入端点后所有区间的位置,将其赋初值为第一对区间的右端点,因为该点是一定可达的。设置变量res来存储需要移除空间的数量。
遍历intervals数组,有如下两种情况
- 如果当前区间右端点小于或者等于新区间的左端点,说明可以将新区间加入到总区间中,将len赋值为新区间的右端点。
- 如果当前总区间右端点大于新区间的左端点,说明加入发生了冲突,将res++。局部最优是在保证res较小的情况下使得总区间范围尽可能小,如果发生以下情况,即当前总区间右端点大于新区间的右端点,为了使得较小区间总范围较小,我们应该放弃上一个端点选择新端点,所以应该进行判断使得len为总区间右端点和新区间右端点之间的最小值。
java
import java.util.Arrays;
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
Arrays.sort(intervals,(o1, o2) -> {
if(o1[0] == o2[0]){
return o1[1] - o2[1];
}
return o1[0] - o2[0];
});
int res = 0;
int len = intervals[0][1];
for(int i = 1;i < intervals.length;i++){
if(len <= intervals[i][0]){
len = intervals[i][1];
}else{
res++;
len = Math.min(len,intervals[i][1]);
}
}
return res;
}
}
时间复杂度O(nlogn)排序的时间复杂度为nlogn,遍历的时间复杂度为n
空间复杂度O(logn)排序所需要的栈空间