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].

解题思路一:

参考Java for LeetCode 056 Merge Intervals思路一,去掉最外层循环即可,JAVA实现如下:

public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
if (newInterval == null)
return intervals;
int startIndex = 0, endIndex = 0;
for (int j = 0; j < intervals.size(); j++) {
if (newInterval.start > intervals.get(j).end) {
startIndex += 2;
endIndex += 2;
continue;
}
if (newInterval.end < intervals.get(j).start)
break;
if (newInterval.start >= intervals.get(j).start)
startIndex++;
if (newInterval.end > intervals.get(j).end) {
endIndex += 2;
continue;
}
if (newInterval.end >= intervals.get(j).start)
endIndex++;
break;
}
if(startIndex==endIndex&&startIndex%2==0)
intervals.add(startIndex/2,new Interval(newInterval.start,newInterval.end));
else if(startIndex%2==0&&endIndex%2==0){
intervals.get(startIndex/2).start=newInterval.start;
intervals.get(startIndex/2).end=newInterval.end;
for(int k=1;k<endIndex/2-startIndex/2;k++)
intervals.remove(startIndex/2+1);
}
else if(startIndex%2==0&&endIndex%2!=0){
intervals.get(startIndex/2).start=newInterval.start;
intervals.get(startIndex/2).end=intervals.get(endIndex/2).end;
for(int k=1;k<=endIndex/2-startIndex/2;k++)
intervals.remove(startIndex/2+1);
}
else if(startIndex%2!=0&&endIndex%2==0){
intervals.get(startIndex/2).end=newInterval.end;
for(int k=1;k<endIndex/2-startIndex/2;k++)
intervals.remove(startIndex/2+1);
}
else if(startIndex%2!=0&&endIndex%2!=0){
intervals.get(startIndex/2).end=intervals.get(endIndex/2).end;
for(int k=1;k<=endIndex/2-startIndex/2;k++)
intervals.remove(startIndex/2+1);
}
return intervals;
}

解题思路二:

参考Java for LeetCode 056 Merge Intervals思路二,添加后重新排序即可,JAVA实现如下:

	public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
if (intervals == null)
return intervals;
List<Interval> list = new ArrayList<Interval>();
intervals.add(newInterval);
Comparator<Interval> comparator = new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
if (o1.start == o2.start)
return o1.end - o2.end;
return o1.start - o2.start;
}
};
Collections.sort(intervals, comparator);
for (Interval interval : intervals) {
if (list.size() == 0 || list.get(list.size() - 1).end < interval.start)
list.add(new Interval(interval.start, interval.end));
else
list.get(list.size() - 1).end = Math.max(interval.end, list.get(list.size() - 1).end);
}
return list;
}

Java for LeetCode 057 Insert Interval的更多相关文章

  1. 【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  2. leetcode 57 Insert Interval & leetcode 1046 Last Stone Weight & leetcode 1047 Remove All Adjacent Duplicates in String & leetcode 56 Merge Interval

    lc57 Insert Interval 仔细分析题目,发现我们只需要处理那些与插入interval重叠的interval即可,换句话说,那些end早于插入start以及start晚于插入end的in ...

  3. 【leetcode】Insert Interval

    Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ( ...

  4. Leetcode: Merge/Insert Interval

    题目 Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[ ...

  5. leetCode 57.Insert Interval (插入区间) 解题思路和方法

    Insert Interval  Given a set of non-overlapping intervals, insert a new interval into the intervals ...

  6. 第一周 Leetcode 57. Insert Interval (HARD)

    Insert interval  题意简述:给定若干个数轴上的闭区间,保证互不重合且有序,要求插入一个新的区间,并返回新的区间集合,保证有序且互不重合. 只想到了一个线性的解法,所有区间端点,只要被其 ...

  7. LeetCode 57. Insert Interval 插入区间 (C++/Java)

    题目: Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if nec ...

  8. LeetCode: 57. Insert Interval(Hard)

    1. 原题链接 https://leetcode.com/problems/insert-interval/description/ 2. 题目要求 该题与上一题的区别在于,插入一个新的interva ...

  9. 057 Insert Interval 插入区间

    给出一个无重叠的按照区间起始端点排序的区间列表.在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间).示例 1:给定区间 [1,3],[6,9],插入并合并 ...

随机推荐

  1. 【CodeForces 622A】Infinite Sequence

    题意 一个序列是, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5....这样排的,求第n个是什么数字. 分析 第n个位置属于1到k,求出k,然后n-i*(i-1)/ ...

  2. C语言浮点数除法可以精确到多少位小数

    double型的两个数相除,得到的浮点数能精确到多少位呢..用我家电脑做了个实验,编译器是Code::Blocks 13.12. 然后用电脑自带的计算器算的结果和C语言算的结果比较如图. 第一例里a= ...

  3. 6.Android之switch和togglebutton按钮学习

    Switch和ToggleButton按钮在手机上也经常看到,比如手机设置里面wlan,蓝牙,gps开关等. 首先在工具上拖进一个switch和togglebutton开关按钮,如图 生成xml代码如 ...

  4. RequestMethod 相关

    Http协议的Delete和Put方法是做什么的?怎么用? RequestMethod 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一般来说,Web服务器默认的只支持Pos ...

  5. 【bzoj2115】 Xor

    www.lydsy.com/JudgeOnline/problem.php?id=2115 (题目链接) 题意 给出一张图,可能有重边和自环,在图中找出一条从1-n的路径,使得经过的路径的权值的异或和 ...

  6. poj 3463 最短路与次短路&&统计个数

    题意:求最短路和比最短路长度多1的次短路的个数 本来想图(有)方(模)便(版)用spfa的,结果妹纸要我看看dijkstra怎么解.... 写了三遍orz Ver1.0:堆优化+邻接表,WA //不能 ...

  7. hihoCoder 1195 高斯消元.一

    传送门 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:喂不得了啦,那边便利店的薯片半价了! 小Hi:啥?! 小Ho:那边的便利店在打折促销啊. 小Hi:走走走, ...

  8. 轻量级应用开发之(04)UIScrollView-1

    本文是我在学习OC中的一些经验总结,在学习中总结了常用的Mac技巧,欢迎群友对本文提出意见,如有问题请联系我. 一 什么是UIScrollView 1)移动设备的屏幕大小是极其有限的,因此直接展示在用 ...

  9. 添加已有项目到git rep

    cd yourproject——homegit init //在当前项目目录中生成本地git管理,建立一个隐藏.git目录 git add src //添加你想用git管理的代码的目录 git com ...

  10. js中改变不同的div属性值的操作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...