面试题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}))
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值