跳到主要内容

二维数组区间合并

package main

import "fmt"

// 以数组 intervals 表示若干个区间的集合,
//其中单个区间为 intervals[i] = [starti, endi] 。
//请你合并所有重叠的区间,并返回 一个不重叠的区间数组,
//该数组需恰好覆盖输入中的所有区间 。

// 示例 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] 可被视为重叠区间。

// 提示:

// 1 <= intervals.length <= 104
// intervals[i].length == 2
// 0 <= starti <= endi <= 104
func main() {
intervals := [][]int{{4, 7}, {1, 3}, {2, 6}, {8, 10}, {15, 18}}
re := sortArr(intervals)
fmt.Println(intervals)
fmt.Println(re)
}

func sortArr(intervals [][]int) [][]int {
for i := 0; i < len(intervals); i++ {
for j := i + 1; j < len(intervals); j++ {
if intervals[i][0] > intervals[j][0] {
intervals[i], intervals[j] = intervals[j], intervals[i]
}
}
}

res := make([][]int, 0)

for i := 1; i < len(intervals); i++ {
if i == 1 {
res = append(res, intervals[i-1])
}
reslen := len(res) - 1
if intervals[i][0] <= res[reslen][1] {
rightRes := 0
if intervals[i][1] > res[reslen][1] {
rightRes = intervals[i][1]
} else {
rightRes = res[reslen][1]
}
res[reslen] = []int{res[reslen][0], rightRes}
} else {
res = append(res, intervals[i])
}
}
return res
}