LeetCode-Array-【56】合併區間(Java)

題目描述:

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

示例 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][]);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章