一 区间调度
1. 区间调度问题
给定[start, end]
区间,设计算法找最多有几个互不相交二点区间。
1.1 解题思路
- 对所有区间根据end进行排序,选中最小得区间x
- 删除与x相交得区间
- 重复1.2.步骤。选出最大不相交子集。
1.2 图示
1.3 类似问题
打气球问题,课程表\宣讲会教室分配,重叠子区间。
1.4 解题模板
比较器参考:https://editor.csdn.net/md/?articleId=116269691
public static int intervalSchedule(int[][] intvs){
if(intvs.length == 0){
return 0;
}
//按end排序
Arrays.sort(intvs, new Comparator<int[]>() {
@Override
public int compare(int[] a, int[] b) {
return a[1] - b[1];
}
});
//至少有一个区间不相交
int count = 1;
//排序后,第一个区间就是x
int x_end = intvs[0][1];
for (int[] interval : intvs) {
int start = interval[0