Merge Interval:

Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

算法分析:首先要对给定序列排序。然后再去遍历合并。

  1. class Interval
  2. {
  3. int start;
  4. int end;
  5. Interval()
  6. {
  7. start = 0;
  8. end = 0;
  9. }
  10. Interval(int s, int e)
  11. {
  12. start = s;
  13. end = e;
  14. }
  15. }
  16. public class MergeIntervals
  17. {
  18. public List<Interval> merge(List<Interval> intervals)
  19. {
  20. List<Interval> res = new ArrayList<>();
  21. if(intervals == null || intervals.size() == 0)
  22. {
  23. return res;
  24. }
  25. Collections.sort(intervals, new Comparator<Interval>()//自定义比较方法,外部实现Comparator接口
  26. {
  27. public int compare(Interval i1, Interval i2)
  28. {
  29. if(i1.start != i2.start)
  30. {
  31. return i1.start - i2.start;
  32. }
  33. else
  34. {
  35. return i1.end - i2.end;
  36. }
  37. }
  38. });
  39. Interval pre = intervals.get(0);
  40. for(int i = 0; i < intervals.size(); i ++)
  41. {
  42. Interval curr = intervals.get(i);
  43. if(curr.start > pre.end)
  44. {
  45. res.add(pre);
  46. pre = curr;
  47. }
  48. else
  49. {
  50. Interval merged = new Interval(pre.start, Math.max(pre.end, curr.end));
  51. pre = merged;
  52. }
  53. }
  54. res.add(pre);
  55. return res;
  56. }
  57. }

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:
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. public class InsertInterval
  2. {
  3. public List<Interval> insert(List<Interval> intervals, Interval newInterval)
  4. {
  5. List<Interval> res = new ArrayList<>();
  6. for (Interval interval : intervals)
  7. {
  8. if(interval.end < newInterval.start)
  9. {
  10. res.add(interval);
  11. }
  12. else if(interval.start > newInterval.end)
  13. {
  14. res.add(newInterval);
  15. newInterval = interval;
  16. }
  17. else if(interval.start <= newInterval.end || interval.end >= newInterval.start)
  18. {
  19. newInterval = new Interval(Math.min(interval.start, newInterval.start),Math.max(interval.end, newInterval.end));
  20. }
  21. }
  22. res.add(newInterval);
  23. return res;
  24. }
  25. }

间隔问题,合并间隔(merge interval),插入间隔(insert interval)的更多相关文章

  1. 合并区间 · Merge Intervals & 插入区间 · Insert Interval

    [抄题]: 给出若干闭合区间,合并所有重叠的部分. 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10] ...

  2. [Swift]LeetCode57. 插入区间 | Insert Interval

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

  3. leetcode 56. Merge Intervals 、57. Insert Interval

    56. Merge Intervals是一个无序的,需要将整体合并:57. Insert Interval是一个本身有序的且已经合并好的,需要将新的插入进这个已经合并好的然后合并成新的. 56. Me ...

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

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

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

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

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

  7. 60. Insert Interval && Merge Intervals

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

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

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

  9. .Net程序员学用Oracle系列(13):合并语句(MERGE)

    - 1.[**语法说明**](#segment1) - 1.1.[UPDATE 和 INSERT 可以只出现一个](#point11) - 1.2.[UPDATE 后面还可以再跟 WHERE](#po ...

随机推荐

  1. json字符串和json对象的转换

    http://www.json.org/提供了一个json2.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法: parse用于从一个 ...

  2. jQuery 对象访问 index([selector|element])

    搜索匹配的元素,并返回相应元素的索引值,从0开始计数. 如果不给 .index() 方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的位置. 如果参数是一组DOM元素或 ...

  3. js实现查询关键词,使其高亮

    今天做了一个功能:在页面上查询关键,使其高亮显示,实现代码如下: css: <style type="text/css"> .highlight { backgroun ...

  4. 巨蟒python全栈开发数据库前端1:HTML基础

    1.HTML介绍 什么是前端? 前端就是我们打开浏览器的页面.,很多公司都有自己的浏览器的页面,这个阶段学习的就是浏览器界面 比如京东的界面:https://www.jd.com/ 引子 例1 soc ...

  5. java File delete() 失败,又没有报错。

    因为该文件流还没关闭,就执行了delete(),所以删除失败. 先举几个可以删除掉文件和删除不掉文件的例子(先在F盘创建test1.txt文件,然后可以直接拷贝代码到IDE执行),最后总结下原因: 例 ...

  6. 解决: ./netapp.bin: error while loading shared libraries: libcaffe.so.1.0.0: cannot open shared object file: No such file or directory 运行时报错(caffe)

    caffe安装好后lib没有配置到/usr/lib或/usr/local/lib中,需手动配置: export LD_LIBRARY_PATH=/path_to_your_caffe/build/li ...

  7. 单独使用celery

    单独使用celery 参考 http://docs.celeryproject.org/en/latest/getting-started/index.html https://www.jianshu ...

  8. rest_framework之访问频率控制

    一  自定义频率控制类 class MyThrottle(): visitor_dic = {} def __init__(self): self.history = None def allow_r ...

  9. Android学习九---OpenCV4android org.opencv.feature2d

    不管是在识别,配准等应用中,提取图像的特征都是很关键的一环,提取特征是先找出图像的关键点(如角点,边缘点等),然后用描述子来描述这些点,最后整幅图像就可以表示成一个特征向量,特征向量就可以利用在后续识 ...

  10. ansible判定文件或者文件夹是否存在

    ansible 的常用模块中没有判定当文件存在或者不存在时,执行某个执行 使用下面方法能简单判定某个文件是否存在 --- - name: judge a file or dir is exits sh ...