57 Insert Interval
2015-10-11 17:23
288 查看
题目链接:https://leetcode.com/problems/insert-interval/
题目:
解题思路:
解题前先理清可能发生的情况很重要。就本题来说,有三种情况。
要插入的区间在区间列表中
1、某个区间的内部
2、所有区间外
3、跨区间
其中,跨区间又分三种情况:
![](http://img.blog.csdn.net/20151011172221205)
代码实现:
题目:
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: Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9]. Example 2: Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16]. This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].
解题思路:
解题前先理清可能发生的情况很重要。就本题来说,有三种情况。
要插入的区间在区间列表中
1、某个区间的内部
2、所有区间外
3、跨区间
其中,跨区间又分三种情况:
代码实现:
/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */ public class Solution { public List<Interval> insert(List<Interval> intervals, Interval newInterval) { List<Interval> res = new ArrayList(); if(newInterval == null) return intervals; if(newInterval != null && (intervals == null || intervals.size() == 0)) { res.add(newInterval); return res; } int start = -1; boolean flag = false; for(Interval i : intervals) { if(flag) { // 给定的区间已经被归并,不再与剩余区间做比较 res.add(i); continue; } if(i.start <= newInterval.start && i.end >= newInterval.end) { // 区间内 res.add(i); flag = true; continue; } else if(i.end < newInterval.start || i.start > newInterval.end) { // 区间外 if(i.start > newInterval.end) { if(start != -1) res.add(new Interval(start, newInterval.end)); else res.add(newInterval); flag = true; } res.add(i); continue; } else { // 跨区间 if(start == -1) // 遇到第一个被跨区间的区间 start = Math.min(i.start, newInterval.start); if(i.end >= newInterval.end) { res.add(new Interval(start, i.end)); flag = true; } } } if(!flag) { if(start != -1) res.add(new Interval(start, newInterval.end)); else res.add(newInterval); } return res; } }
151 / 151 test cases passed. Status: Accepted Runtime: 4 ms
相关文章推荐
- 软件测试从业人员 对未来工作有价值的认证证书
- 小议c++内存分配
- 第一天 图像的显示、保存
- 线段树 HDU 1166
- Linux(10.5-10.11)学习笔记
- twisted的一些代码
- Centos 添加SWAP(交换分区)
- laravel routes除了默认路由,其他的都无效 解决方案
- java反射
- 编程珠玑位逻辑运算实现位向量
- 进销存管理系统——可行性分析
- 信息安全系统设计第四周实验报告
- LintCode : 搜索区间
- 【UML】对象图Object diagram
- JavaScript 数组
- 神码组的聊天室项目。
- netty内存泄露检测原理
- 温泉ソムリエのメルマガ
- 程序员书单合集,持续整理中
- 第十七章 高级进程间通信