Skip to main content

56. Merge Intervals

分析

看注释吧,细节挺多的,也要想清楚分类

题解

func merge(intervals [][]int) [][]int {
copyFromIntervals := make([][]int, len(intervals))
copy(copyFromIntervals, intervals)

// 按照 start 排序
sort.Slice(copyFromIntervals, func(i, j int) bool {
return copyFromIntervals[i][0] < copyFromIntervals[j][0]
})

// 注意 这里容易犯错 不是 len
ans := make([][]int, 0)

currentInterval := copyFromIntervals[0]
for i := 1; i < len(copyFromIntervals); i++ {
/*
合并
---
-
---
---
*/
if currentInterval[1] >= copyFromIntervals[i][0] &&
currentInterval[1] < copyFromIntervals[i][1] {
currentInterval[1] = copyFromIntervals[i][1]
}
/*
增加新的
---
---
*/
if currentInterval[1] < copyFromIntervals[i][0] {
// 如果只有一个interval 或者 最后一个是合并
// 这个就不会执行 / 缺少执行
ans = append(ans, currentInterval)
currentInterval = copyFromIntervals[i]
}
}

// 他们具有一个特点 len
if len(ans) == 0 || &currentInterval != &ans[len(ans) - 1] {
ans = append(ans, currentInterval)
}

return ans
}