合并区间,对象比较大小,int compare(T a, T b)返回值位负数,则认为a小,否则a大
![](https://img2022.cnblogs.com/blog/608798/202211/608798-20221112210121268-1912265691.png)
import java.util.*;
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
public class Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
//区间按照起点升序排序
//取出A中第一个区间存入B
//取出B的最后一个区间和A的二个区间比较,局部最优解存入B
//取出B的最后一个区间和A的三个区间比较,局部最优解存入B
//取出B的最后一个和A的第四个比较,局部最优解存入B
//取出B的最后一个区间和A的第五个比较,局部最优解存入B
Collections.sort(intervals, new Comparator<Interval>(){
public int compare(Interval o1, Interval o2){
if(o1.start != o2.start)
return o1.start - o2.start;
else
return o1.end - o2.end;
}
});
ArrayList<Interval> re_list = new ArrayList<Interval>();
if(intervals.size()==0){
return re_list;
}
re_list.add(intervals.get(0));
for(int i=1; i<intervals.size(); i++){
//临时A,可能有问题
Interval A = re_list.get(re_list.size()-1);
re_list.remove(re_list.size()-1);
//临时B,可能有问题
Interval B = intervals.get(i);
if(A.end<B.start){
re_list.add(A);
re_list.add(B);
}else if(A.end>=B.start){
if(A.end>B.end){
A.end = A.end;
}else{
A.end = B.end;
}
re_list.add(A);
}
}
return re_list;
}
}