Skip to content

Commit 28c6c8c

Browse files
committed
数组: 区间合并
Change-Id: I7a4ac2e44e4a69ff4bc36707b0710b45d6055b34
1 parent ca71b40 commit 28c6c8c

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

go/leetcode/56.合并区间.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* @lc app=leetcode.cn id=56 lang=golang
3+
*
4+
* [56] 合并区间
5+
*
6+
* https://leetcode-cn.com/problems/merge-intervals/description/
7+
*
8+
* algorithms
9+
* Medium (38.17%)
10+
* Likes: 192
11+
* Dislikes: 0
12+
* Total Accepted: 30K
13+
* Total Submissions: 77.8K
14+
* Testcase Example: '[[1,3],[2,6],[8,10],[15,18]]'
15+
*
16+
* 给出一个区间的集合,请合并所有重叠的区间。
17+
*
18+
* 示例 1:
19+
*
20+
* 输入: [[1,3],[2,6],[8,10],[15,18]]
21+
* 输出: [[1,6],[8,10],[15,18]]
22+
* 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
23+
*
24+
*
25+
* 示例 2:
26+
*
27+
* 输入: [[1,4],[4,5]]
28+
* 输出: [[1,5]]
29+
* 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
30+
*
31+
*/
32+
33+
import (
34+
"sort"
35+
)
36+
37+
type SortArray [][]int
38+
39+
func (a SortArray) Len() int {
40+
return len(a)
41+
}
42+
func (a SortArray) Swap(i, j int) {
43+
a[i], a[j] = a[j], a[i]
44+
}
45+
func (a SortArray) Less(i, j int) bool {
46+
return a[i][0] < a[j][0]
47+
}
48+
49+
func merge(intervals [][]int) [][]int {
50+
sort.Sort(SortArray(intervals))
51+
ret := [][]int{}
52+
tmp := []int{}
53+
for i := 0; i < len(intervals); i++ {
54+
if len(tmp) <= 0 {
55+
tmp = intervals[i]
56+
}
57+
if i >= len(intervals) - 1 {
58+
ret = append(ret, tmp)
59+
break
60+
}
61+
if tmp[1] >= intervals[i+1][0] { // 有重叠
62+
if tmp[1] < intervals[i+1][1] {
63+
tmp[1] = intervals[i+1][1]
64+
}
65+
} else {
66+
ret = append(ret, tmp)
67+
tmp = []int{}
68+
}
69+
}
70+
return ret
71+
}

0 commit comments

Comments
 (0)