题目:给定一个没有叠加的区间序列,现插入一个新的区间到该序列中,要求维持没有重叠的情况。假设该系列存放的区间有序的,区间定义如题目“重叠区间个数”。
举例:
假定我们已有两个不重叠而且排好序的区间:[1,5],[6,10],现插入一个新的区间[4,6],那么最后结果是[1,10]。
代码实现:
package main
import (
"fmt"
)
type Interval struct {
start int
end int
}
// 在大脑里思路和纸上模拟过程会帮助理解
func insert(intervals []Interval, newInt Interval) Interval {
n := len(intervals)
if n == 0 {
return newInt
}
i := 0
// 找到要插入的位置,也就是确定区间的开始值
for i < n && newInt.start > intervals[i].end {
i += 1
}
// 找到区间结束值
for i < n && newInt.end > intervals[i].start {
if newInt.start > intervals[i].start {
newInt.start = intervals[i].start
}
if newInt.end < intervals[i].end {
newInt.end = intervals[i].end
}
i += 1
}
return newInt
}
func main() {
// 测试用例
a := []Interval{Interval{1, 2}, Interval{5, 6}, Interval{8, 10}, Interval{20, 30}}
fmt.Println(insert(a, Interval{5, 9}))
}