2021-09-28:合併區間。以陣列 intervals 表示若干個區間的集合,

2021-09-28:合併區間。以陣列 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] = [starti, endi] 。請你合併所有重疊的區間,並返回一個不重疊的區間陣列,該陣列需恰好覆蓋輸入中的所有區間。力扣56。

福大大 答案2021-09-28:

按開始位置排序。i的開始位置比之前的結束位置,需要計數。

時間複雜度:排序的。

額外空間複雜度:O(1)。原陣列複用。

程式碼用golang編寫。程式碼如下:

package mainimport ( “fmt” “sort”)func main() { intervals := [][]int{{1, 3}, {2, 6}, {8, 10}, {15, 18}} ret := merge(intervals) fmt。Println(ret)}func merge(intervals [][]int) [][]int { if len(intervals) == 0 { return [][]int{} } sort。Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] }) s := intervals[0][0] e := intervals[0][1] size := 0 for i := 1; i < len(intervals); i++ { if intervals[i][0] > e { intervals[size][0] = s intervals[size][1] = e size++ s = intervals[i][0] e = intervals[i][1] } else { e = getMax(e, intervals[i][1]) } } intervals[size][0] = s intervals[size][1] = e size++ return intervals[0:size]}func getMax(a int, b int) int { if a > b { return a } else { return b }}

執行結果如下:

2021-09-28:合併區間。以陣列 intervals 表示若干個區間的集合,

***

[左神java程式碼](https://github。com/algorithmzuo/coding-for-great-offer/blob/main/src/class29/Problem_0056_MergeIntervals。java)