合并区间
Problem: 56. 合并区间
思路
bite数组与排序两种思路
解题方法
描述你的解题方法
复杂度
时间复杂度:
添加时间复杂度, 示例: $O(n)$
空间复杂度:
添加空间复杂度, 示例: $O(n)$
Code1 这个写的有点不优美了 丑
func merge(intervals [][]int) [][]int {
result := [][]int{}
// false, 由于[[1,4],[5,6]]要求返回[[1,4],[5,6]]而不是[1,6], 故bool数组翻倍使用<<1
boolArray := make([]bool, (10*10*10*10+1)<<1)
// minNumber, maxNumber := math.MaxInt, math.MinInt
// 将范围内的bool改成true
for _, i := range intervals {
// if i[0] < minNumber {
// minNumber = i[0]
// }
// if i[0] > maxNumber {
// maxNumber = i[0]
// }
for index := i[0]; index <= i[1]; index++ {
// 如果是i[0], 就不需要与前面连接
if index == i[0] {
boolArray[index<<1] = true
} else {
boolArray[index<<1-1], boolArray[index<<1] = true, true
}
}
}
// 返回结果
for i := 0; i < len(boolArray); i++ {
// 当遇到true时
if boolArray[i] {
// 找到下一个i不为true的
j := 1
for boolArray[i+j] && j < len(boolArray)-i {
j++
}
result = append(result, []int{i >> 1, (i + j - 1) >> 1})
i = i + j - 1
}
}
return result
}
Code2
func merge(intervals [][]int) [][]int {
result := [][]int{}
// 排序
sort.Slice(intervals, func(i, j int) bool {
return intervals[i][0] < intervals[j][0]
})
for _, interval := range intervals {
// 第一次或者与前面的区间不重合
if len(result) == 0 || interval[0] > result[len(result)-1][1] {
result = append(result, interval)
} else {
if result[len(result)-1][1] < interval[1] {
result[len(result)-1][1] = interval[1]
}
}
}
return result
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步