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. struct Interval {
  2. int start;
  3. int end;
  4. Interval() : start(0), end(0) { }
  5. Interval(int s, int e) : start(s), end(e) { }
  6. };
  7. // Insert Interval
  8. // 时间复杂度O(n),空间复杂度O(1)
  9. public class Solution {
  10. public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
  11. for (int i = 0; i < intervals.size();) {
  12. final Interval cur = intervals.get(i);
  13. if (newInterval.end < cur.start) {
  14. intervals.add(i, newInterval);
  15. return intervals;
  16. } else if (newInterval.start > cur.end) {
  17. ++i;
  18. continue;
  19. } else {
  20. newInterval.start = Math.min(newInterval.start, cur.start);
  21. newInterval.end = Math.max(newInterval.end, cur.end);
  22. intervals.remove(i);
  23. }
  24. }
  25. intervals.add(newInterval);
  26. return intervals;
  27. }
  28. }

相关题目

原文: https://soulmachine.gitbooks.io/algorithm-essentials/content/java/simulation/insert-interval.html