LeetCode 合併區間 排序

2021-10-10 04:04:14 字數 1602 閱讀 1972

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

示例 1:

輸入: intervals = [[1,3],[2,6],[8,10],[15,18]]

輸出: [[1,6],[8,10],[15,18]]

解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].

示例2:

輸入: 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 可被視為重疊區間。思路分析 此...