天天看點

leetcode 56.合并區間 Java做題部落格連結題目連結描述示例初始代碼模闆代碼

合并區間

  • 做題部落格連結
  • 題目連結
  • 描述
  • 示例
  • 初始代碼模闆
  • 代碼

做題部落格連結

https://blog.csdn.net/qq_43349112/article/details/108542248

題目連結

https://leetcode-cn.com/problems/merge-intervals/

描述

以數組 intervals 表示若幹個區間的集合,其中單個區間為 intervals[i] = [starti, endi] 。請你合并所有重疊
的區間,并傳回一個不重疊的區間數組,該數組需恰好覆寫輸入中的所有區間。

提示:

1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104
           

示例

示例 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] 可被視為重疊區間。
           

初始代碼模闆

class Solution {
    public int[][] merge(int[][] intervals) {
       
    }
}
           

代碼

class Solution {
    public int[][] merge(int[][] intervals) {
       Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);
       
       int[][] res = new int[intervals.length][2];
       int idx = 0;
       for (int[] cur : intervals) {
           if (idx == 0 || cur[0] > res[idx - 1][1]) {
               res[idx] = cur;
               idx++;
           } else {
               res[idx - 1][1] = Math.max(res[idx - 1][1], cur[1]);
           }
       }

       return Arrays.copyOf(res, idx);
    }
}