合并区间

合并区间是一个常见的算法问题,目标是将重叠的区间合并成一个或多个不重叠的区间。以下是一个用 Golang 实现的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package main

import (
"fmt"
"sort"
)

type Interval struct {
Start int
End int
}

func merge(intervals []Interval) []Interval {
if len(intervals) <= 1 {
return intervals
}

// 将区间按照起始位置进行排序
sort.Slice(intervals, func(i, j int) bool {
return intervals[i].Start < intervals[j].Start
})

merged := []Interval{intervals[0]}

for i := 1; i < len(intervals); i++ {
current := intervals[i]
lastMerged := merged[len(merged)-1]

// 判断当前区间与上一个合并后的区间是否有重叠
if current.Start <= lastMerged.End {
// 有重叠,更新合并后的区间的结束位置
merged[len(merged)-1].End = max(lastMerged.End, current.End)
} else {
// 无重叠,直接加入合并后的结果
merged = append(merged, current)
}
}

return merged
}

func max(a, b int) int {
if a > b {
return a
}
return b
}

func main() {
// 创建一组区间
intervals := []Interval{
{1, 3},
{2, 6},
{8, 10},
{15, 18},
}

// 合并区间
result := merge(intervals)

// 输出结果
fmt.Println("合并后的区间:", result)
}