給出乙個區間的集合,請合併所有重疊的區間。
示例 1:
輸入: intervals = [[1,3],[2,6],[8,10],[15,18]]示例2:輸出: [[1,6],[8,10],[15,18]]
解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].
輸入: intervals = [[30,80],[1,15],[1,100]]輸出: [[1,100]]
解釋: 這個陣列中的其它區間都在1與100之間.
intervals[i][0] <= intervals[i][1]解題思路如下:
先對二維陣列按照區間左邊的值進行公升序排列(二維陣列按行排序)
對排好序的二維陣列intervals進行合併去重疊,邏輯如下:
因為排好了序intervals的第0行0列直接加入到list中。maxvalue進行記錄當前右邊最大值(也就是intervals[i][1]),如果maxvalue值小於下行左值,maxvalue與下行左值可直接加入list,更新maxvalue為下行右值。如果maxvalue值大於或等於下行左值,須判斷maxvalue如果小於下行右值,則maxvalue被賦值為下行右值,否則返回對下下行進行判斷。
如圖:
都是用當前的右值(maxvalue)去對下行的左值與右值進行判斷!
畫圖能使問題更直觀! 分解拆分問題,第一步是對第二步的鋪墊,先如何後如何。**如下:
public
static
int[
]merge
(int
intervals)})
;//2.合併重疊
list
list =
newarraylist
(); list.
add(intervals[0]
[0])
;int maxval = intervals[0]
[1];
for(
int i=
0;i1;i++
)else}}
list.
add(maxval)
;//3.生成新的二維陣列
int newinter[
]=newint
[list.
size()
/2][
2];int row =0;
for(
int i=
0;isize()
;i++
)return newinter;
}
此題排序是關鍵,對資料進行乙個整理。所以有時候原資料不進行乙個重新的整理歸納,會加大後面操作的難度性或後面根本無法操作! 56 合併區間 排序(leetcode)
給出乙個區間的集合,請合併所有重疊的區間。思路 1.先將 list of lists 用sort排序,本題中根據list第乙個元素進行sort可以直接 sort a 如果需要使用 list.sort key function 可參考 b 舉例 a.sort key lambda x x 0 等價於 ...
LeetCode 區間合併
區間合併 給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。i...
LeetCode 合併區間
給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。思路分析 此...