LeetCode56. 合併區間-二維陣列排序問題
阿新 • • 發佈:2021-01-14
技術標籤:ACM
- 合併區間
給出一個區間的集合,請合併所有重疊的區間。
示例 1:
輸入: intervals = [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].
示例 2:
輸入: intervals = [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。
注意:輸入型別已於2019年4月15日更改。 請重置預設程式碼定義以獲取新方法簽名。
提示:
intervals[i][0] <= intervals[i][1]
二維陣列排序問題
Arrays.sort(a, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0]==o2[0]) return o1[1]-o2[1];
return o1[0]-o2[0];
}
});
class Solution { public int[][] merge(int[][] intervals) { if(intervals == null || intervals.length ==0) return new int[0][2]; int[][] result = new int[intervals.length][intervals[0].length]; Arrays.sort(intervals, new Comparator<int[]>(){ public int compare(int[] a, int[] b){ if(a[0] == b[0]){ return a[1]- b[1]; } return a[0] - b[0]; } }); int k = 0; for(int i = 0;i < intervals.length;i++){ if(i == 0){ result[k][0] = intervals[i][0]; result[k][1] = intervals[i][1]; k++; } else { if(intervals[i][0] <= result[k-1][1] && intervals[i][1] >= result[k-1][1]){ result[k-1][1] = intervals[i][1]; } else if(intervals[i][1] <= result[k-1][1]){ continue; } else{ result[k][0] = intervals[i][0]; result[k][1] = intervals[i][1]; k++; } } } //System.out.println(k); int[][] res = new int[k][2]; for(int i = 0; i < k; i++){ res[i][0] = result[i][0]; res[i][1] = result[i][1]; } return res; } }