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实现如下:

  1. public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
  2. if (newInterval == null)
  3. return intervals;
  4. int startIndex = 0, endIndex = 0;
  5. for (int j = 0; j < intervals.size(); j++) {
  6. if (newInterval.start > intervals.get(j).end) {
  7. startIndex += 2;
  8. endIndex += 2;
  9. continue;
  10. }
  11. if (newInterval.end < intervals.get(j).start)
  12. break;
  13. if (newInterval.start >= intervals.get(j).start)
  14. startIndex++;
  15. if (newInterval.end > intervals.get(j).end) {
  16. endIndex += 2;
  17. continue;
  18. }
  19. if (newInterval.end >= intervals.get(j).start)
  20. endIndex++;
  21. break;
  22. }
  23. if(startIndex==endIndex&&startIndex%2==0)
  24. intervals.add(startIndex/2,new Interval(newInterval.start,newInterval.end));
  25. else if(startIndex%2==0&&endIndex%2==0){
  26. intervals.get(startIndex/2).start=newInterval.start;
  27. intervals.get(startIndex/2).end=newInterval.end;
  28. for(int k=1;k<endIndex/2-startIndex/2;k++)
  29. intervals.remove(startIndex/2+1);
  30. }
  31. else if(startIndex%2==0&&endIndex%2!=0){
  32. intervals.get(startIndex/2).start=newInterval.start;
  33. intervals.get(startIndex/2).end=intervals.get(endIndex/2).end;
  34. for(int k=1;k<=endIndex/2-startIndex/2;k++)
  35. intervals.remove(startIndex/2+1);
  36. }
  37. else if(startIndex%2!=0&&endIndex%2==0){
  38. intervals.get(startIndex/2).end=newInterval.end;
  39. for(int k=1;k<endIndex/2-startIndex/2;k++)
  40. intervals.remove(startIndex/2+1);
  41. }
  42. else if(startIndex%2!=0&&endIndex%2!=0){
  43. intervals.get(startIndex/2).end=intervals.get(endIndex/2).end;
  44. for(int k=1;k<=endIndex/2-startIndex/2;k++)
  45. intervals.remove(startIndex/2+1);
  46. }
  47. return intervals;
  48. }

解题思路二:

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

  1. public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
  2. if (intervals == null)
  3. return intervals;
  4. List<Interval> list = new ArrayList<Interval>();
  5. intervals.add(newInterval);
  6. Comparator<Interval> comparator = new Comparator<Interval>() {
  7. @Override
  8. public int compare(Interval o1, Interval o2) {
  9. if (o1.start == o2.start)
  10. return o1.end - o2.end;
  11. return o1.start - o2.start;
  12. }
  13. };
  14. Collections.sort(intervals, comparator);
  15. for (Interval interval : intervals) {
  16. if (list.size() == 0 || list.get(list.size() - 1).end < interval.start)
  17. list.add(new Interval(interval.start, interval.end));
  18. else
  19. list.get(list.size() - 1).end = Math.max(interval.end, list.get(list.size() - 1).end);
  20. }
  21. return list;
  22. }

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. Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError

    SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackO ...

  2. BZOJ-2748 音量调节 DP+背包(脑残)

    水DP,一开始竟然想错了...水了半天....真可怕 2748: [HAOI2012]音量调节 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 1156 ...

  3. DataSet筛选数据然后添加到新的DataSet中引发的一系列血案

    直入代码: var ds2 = new DataSet(); ) { ].Select(" usertype <> 'UU'"); ) { DataTable tmp ...

  4. 【干货】Laravel --Validate (表单验证) 使用实例

    前言 : Laravel 提供了多种方法来验证应用输入数据.默认情况下,Laravel 的控制器基类使用ValidatesRequests trait,该trait提供了便利的方法通过各种功能强大的验 ...

  5. JDK,JRE,JVM区别与联系(ZZ)

    http://www.cnblogs.com/hencehong/p/3252166.html 我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JD ...

  6. 使用jQuery解析JSON数据(由ajax发送请求到php文件处理数据返回json数据,然后解析json写入html中呈现)

    在上一篇的Struts2之ajax初析中,我们得到了comments对象的JSON数据,在本篇中,我们将使用jQuery进行数据解析. 我们先以解析上例中的comments对象的JSON数据为例,然后 ...

  7. 初学JDBC,最简单示例

    一.下载相应数据库驱动jar包,添加到项目中 二.注册驱动,数据库驱动只加入到classpath中是还不行的,还要在使用的时候注册一下,就像安装驱动软件,只拷贝到硬盘还不行,需要安装一下 Driver ...

  8. 得分(Score,ACM/ICPC Seoul 2005,UVa 1585)

    #include<stdio.h> int main(void) { char b; int t,cou,sum; scanf("%d",&t); getcha ...

  9. 设置button不同状态下的背景色,即把这个颜色变成图片设置成,背景图片

    - (void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state { [self setBack ...

  10. Unity3d三大光照渲染介绍

      重要:在目前市面上常见的游戏引擎中,主要采用以下三种灯光实现方式: 顶点照明渲染路径细节 Vertex Lit Rendering Path Details 正向渲染路径细节 Forward Re ...