Array - 57. Insert Interval
时间:2022-07-25
本文章向大家介绍Array - 57. Insert Interval,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
Output: [[1,5],[6,9]]
Example 2:
Input: intervals = `[[1,2],[3,5],[6,7],[8,10],[12,16]]`, newInterval = `[4,8]`
Output: [[1,2],[3,10],[12,16]]
Explanation: Because the new interval `[4,8]` overlaps with `[3,5],[6,7],[8,10]`.
NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
思路:
题目意思是将一个区间插入一个有序的区间集合,做法有两种: 方法1. 参考第56题,在这题目中,只需要把待插入的区间插入到有序集合之中,就变成56题合并区间的题目。 方法2. 可以把区间集合看做三个部分:
与插入无关的左边区间集合 | 与插入区间有关的集合 | 与插入无关的右边区间集合
,这样区分之后,在插入区间有关的集合中,只需要更新上下界限就可以。
代码:
go:
// solution one:
func insert(intervals [][]int, newInterval []int) [][]int {
start, end := newInterval[0], newInterval[1]
left, right := make([][]int, 0), make([][]int, 0)
for _, interval := range intervals {
if interval[1] < start {
// 左边区间集合
left = append(left, interval)
} else if interval[0] > end {
// 右边区间集合
right = append(right, interval)
} else {
if interval[0] < start {
start = interval[0]
}
if interval[1] > end {
end = interval[1]
}
}
}
left = append(left, []int{start, end})
left = append(left, right...)
return left
}
// solution two:
/*
type myInterval [][]int
func (intervals myInterval)Len() int { return len(intervals) }
func (intervals myInterval)Less(i, j int) bool { return intervals[i][0] < intervals[j][0] }
func (intervals myInterval)Swap(i, j int) {
intervals[i], intervals[j] = intervals[j], intervals[i]
}
func (intervals myInterval)back() []int {
return intervals[len(intervals) - 1]
}
func (intervals *myInterval)pushBack(interval []int) {
*intervals = append(*intervals, interval)
}
func (intervals *myInterval)modifyBack(i, j int) {
if i > j {
(*intervals)[len(*intervals) - 1][1] = i
} else {
(*intervals)[len(*intervals) - 1][1] = j
}
}
func merge(intervals myInterval) [][]int {
var res myInterval
for _, interval := range intervals {
if len(res) == 0 || interval[0] > res.back()[1] {
res.pushBack(interval)
} else {
// merge
res.modifyBack(interval[1], res.back()[1])
}
}
return res
}
func insert(intervals myInterval, newInterval []int) [][]int {
if intervals.Len() == 0 {
return append([][]int{}, newInterval)
}
for i := 0; i <= intervals.Len() - 1; i++ {
if newInterval[0] <= intervals[i][0] {
nums := append([][]int{}, intervals[:i]...)
nums = append(nums, newInterval)
nums = append(nums, intervals[i:]...)
return merge(nums)
}
}
return merge(append(intervals, newInterval))
}
*/
- .NET的资源并不限于.resx文件,你可以采用任意存储形式[下篇]
- 量化投资教程:用R语言打造量化分析平台
- 也谈事件(Event)
- Zuul:构建高可用网关之多维度限流
- Hystrix:HystrixCollapser请求合并
- oauth2.0 实现spring cloud nosession
- 基于自定义向导的C++单元测试环境自动化配置
- 【spring cloud】自定义jwt实现spring cloud nosession
- R语言的三种聚类方法
- ArrayList foreach 循环里进行元素的 remove add 操作有什么现象?
- 10个令人相见恨晚的R语言包
- 小心Windows旧版认证暴露你的系统帐户密码
- DNS Shell初体验
- 如何在Weka中加载CSV机器学习数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android中Service和Activity相互通信示例代码
- Android编程实现定时发短信功能示例
- Android实现新浪微博一键分享的实例代码
- Android实现常见的验证码输入框实例代码
- Android实现加载状态视图切换效果
- Retrofit + OkHttp缓存处理的示例代码
- Android图片实现压缩处理的实例代码
- Windows10安装linux子系统的两种方式(图文详解)
- Android 图片处理避免出现oom的方法详解
- session登陆成功第四篇4
- Android编程使用pull方式解析xml格式文件的方法详解
- Android中ActionBar和ToolBar添加返回箭头的实例代码
- Android自定义双向进度条的实现代码
- android视频截屏&手机录屏实现代码
- Android自定义组件跟随自己手指主动画圆