1. 程式人生 > 其它 >LeetCode56. 合併區間-二維陣列排序問題

LeetCode56. 合併區間-二維陣列排序問題

技術標籤:ACM

  1. 合併區間

給出一個區間的集合,請合併所有重疊的區間。

示例 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;

    }
}

歡迎關注公眾號:程式設計師開發者社群

在這裡插入圖片描述