472,插入區間

2021-10-10 07:48:29 字數 2837 閱讀 2055

問題描述

給出乙個無重疊的 ,按照區間起始端點排序的區間列表。

在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。

示例 1:

輸入

intervals = [[1,3],[6,9]]

newinterval = [2,5]

輸出:[[1,5],[6,9]]

示例 2:

輸入

intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]]

newinterval = [4,8]

輸出:[[1,2],[3,10],[12,16]]

解釋:這是因為新的區間 [4,8] 與 [3,5],[6,7],[8,10] 重疊。

先計算兩邊再計算中間這裡我們人為把陣列分為3部分,左邊不重合的(如果有)新增到集合list中,右邊不重合的(如果有)也新增到集合list中,然後再合併中間的,這裡以示例2為例畫個圖看一下

原理很簡單,來看下**

public

int[

]insert

(int

intervals,

int[

] newinterval)

; list<

int[

]> reslist =

newarraylist

<

>()

;//乙個從左邊開始找不重合的

int left =0;

//乙個從右邊開始找不重合的

int right = intervals.length -1;

//左邊不重合的新增到list中

while

(left < intervals.length && intervals[left][1

]< newinterval[0]

)//右邊不重合的新增到list中

while

(right >=

0&& intervals[right][0

]> newinterval[1]

)//下面一大坨是合併中間重合的,注意一些邊界條件的判斷

int[

] newarr =

newint[2

];newarr[0]

= left >= intervals.length ? newinterval[0]

: math.

min(intervals[left][0

], newinterval[0]

);newarr[1]

= right <

0? newinterval[1]

: math.

max(intervals[right][1

], newinterval[1]

);reslist.

add(left, newarr)

;//這一大坨是把list轉二維陣列

int[

] resarr =

newint

[reslist.

size()

][2]

;for

(int i =

0; i < reslist.

size()

; i++

)return resarr;

}

逐步合併上面一種方式是先把兩邊不重合的新增到集合list中,之後在合併中間的。這裡還可以從左邊開始把不重合的(如果有不重合的)新增到集合list中,如果遇到重合的就找出重合的範圍然後再新增到集合中,最後再把後面不重合的(如果有)新增到集合list中。

public

int[

]insert

(int

intervals,

int[

] newinterval)

//然後再把重合的新增到list中

reslist.

add(

newint

);//把剩下的在新增到集合list中

while

(i < intervals.length)

reslist.

add(intervals[i++])

;//這一大坨是把list轉二維陣列

int[

] resarr =

newint

[reslist.

size()

][2]

;for

(int j =

0; j < reslist.

size()

; j++

)return resarr;

}

總結這題難度不是很大,但一次寫出來不出錯比較困難,因為他有很多邊界條件的判斷。

56 57 合併區間 插入區間

給出乙個區間的集合,請合併所有重疊的區間。直接對區間起點進行排序,然後遍歷,判斷當前遍歷區間的起點是否在前一區間內,在的話,更新前一區間的終點為兩者終點最大值,不在的話直接將當前區間插入。class solution sort intervals.begin intervals.end const ...

LintCode 插入區間

給出乙個無重疊的按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 樣例 插入區間 2,5 到 1,2 5,9 我們得到 1,9 插入區間 3,4 到 1,2 5,9 我們得到 1,2 3,4 5,9 definition o...

57 插入區間

發現這個題目變簡潔了。區間直接以二維陣列的形式給出,而不是自己定義的資料結構,所以不需要自己寫排序函式了。給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,...