面试题7:插入区间

题目:给定一个没有叠加的区间序列,现插入一个新的区间到该序列中,要求维持没有重叠的情况。假设该系列存放的区间有序的,区间定义如题目“重叠区间个数”。

举例:

    假定我们已有两个不重叠而且排好序的区间:[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}))
}
 
 

猜你喜欢

转载自blog.csdn.net/qq_35191331/article/details/80230351