56.合并区间(java)
题目描述:
1.先判断给定intervals是否为空或者大小是否为1,是则直接返回intervals。
2.对intervals进行排序
数组形式则使用:Arrays.sort(intevals,(a,b)->Integer.compare(a[0],b[0]));
ArrayList形式:intervals.sort((a,b)->Integer.compare(a[0],b[0]));
3.创建结果集存储合并后的区间,将第一个区间添加到res,然后开始遍历intervals数组比较合并
数组形式:ArrayList<int[]> res = new ArrayList<>();
定义区间节点形式:ArrayList<Interval> res = new ArrayList<>();
public class Interval{
int start;
int end;
Interval(){start=0;end=0;}
Interval(int s,int e) {start=s;end=e}
}
4.开始比较(以数组形式为例)
for(int i=1;i<intervals.length;i++){
int[] a=intervals[i];
int[] b=res.get(res.size()-1); // 拿结果集的最后一个区间进行比较
if(b[1]<a[0]) //无法合并,直接将数组a加入到res结果集
res.add(a);
else
b[1]=Math.max(a[1],b[1]); // 合并,更新右区间
}
5.返回结果(以数组为例)
return res.toArray(new int[res.size()][]);
class Solution {public int[][] merge(int[][] intervals) {// 首先区间是否为空和是否为一个区间ArrayList<int[]> res = new ArrayList<>();if(intervals.length==0||intervals.length==1)return intervals;// 排序Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));res.add(intervals[0]);for(int i=1;i<intervals.length;i++){int[] a=intervals[i];int[] b=res.get(res.size()-1);if(b[1]<a[0]) res.add(a);else b[1]=Math.max(a[1],b[1]);}return res.toArray(new int[res.size()][]);}
}