題目描述:
給出一個區間的集合,請合併所有重疊的區間。
示例 1:
輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併爲 [1,6].
解法:
思路
題目要求我們將重疊的部分合併在一起,首先我們規定int left = intervals[ i ][ 0 ];
int right = intervals[ i ][ 1];那麼我們只需要判斷出重疊的條件是:intervals[ i ][ 1 ]>intervals[ i+1 ][ 0 ],即可,如果這個條件成立,那麼我們就將Math.max(right, intervals[i+1][1])中最大的數取出來,賦值給right。然後再循環判斷i後面的數組所代表的區間是否和當前區間重合,重合就循環賦值,否則就加入到res中。
詳細代碼:
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> res = new ArrayList<>();
if(intervals==null) return res.toArray(new int[0][]);
Arrays.sort(intervals, new Comparator<int[]>(){
//將數組元素的第一個按照升序進行排序
public int compare(int[] o1,int[] o2){
return o1[0]-o2[0];
}
});
int i =0;
while(i<intervals.length){
int left = intervals[i][0];
int right = intervals[i][1];
while(i<intervals.length-1&&right>=intervals[i+1][0]){
right = Math.max(right, intervals[i+1][1]);
i++;
}
res.add(new int[]{left,right});
i++;
}
//將res轉換爲二維數組
return res.toArray(new int[0][]);
}
}