給出乙個區間的集合,請合併所有重疊的區間。
示例 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] 可被視為重疊區間。
注意:輸入型別已於2023年4月15日更改。 請重置預設**定義以獲取新方法簽名。
intervals[i][0] <= intervals[i][1]
這種區間問題很容易聯想到貪心,將所有區間按 l 或 r 排序。關鍵問題是怎麼樣排序更方便。
一開始我的思路是按 r 從小到大排序(因為之前做的一些區間題都是對 r 排序),但比比划划都沒辦法找出乙個好方法(或者說很難證明這樣貪心是對的),隨後我就失去了耐心,看了題解,發現大家都是按 l 從小到大排序。比比划划一番,就做好了。
直接上**吧,解釋起來有點麻煩,但思路並不複雜,關鍵就是怎麼樣才能想到按 l 從小到大排序(這個我做不來),排序後分類討論各種情況就可。
class
solution
;static
bool
cmp(
const node &a,
const node &b)
vectorint>>
merge
(vectorint>>
& intervals);}
sort
(arr,arr+n,cmp)
; t = arr[0]
;for
(int i =
1;i < n;i++))
, t = arr[i];}
ans.
push_back()
;return ans;}}
;
leetcode 56 合併區間(貪心)
給出乙個區間的集合,請合併所有重疊的區間。示例 給出 1,3 2,6 8,10 15,18 返回 1,6 8,10 15,18 貪心,先以start大小排序,這樣保證start的是有序的。然後擴張end。也很容易理解,複雜度是nlogn definition for an interval.stru...
openjudge 區間合併(貪心)
總時間限制 1000ms 記憶體限制 65536kb 描述 給定 n 個閉區間 ai bi 其中i 1,2,n。任意兩個相鄰或相交的閉區間可以合併為乙個閉區間。例如,1 2 和 2 3 可以合併為 1 3 1 3 和 2 4 可以合併為 1 4 但是 1 2 和 3 4 不可以合併。我們的任務是判斷...
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...