題目描述:
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()][]);}
}