Skip to content

Latest commit

 

History

History
52 lines (46 loc) · 1.38 KB

insert_interval.md

File metadata and controls

52 lines (46 loc) · 1.38 KB

A

Solution

class Solution {
  bool doesIntersect(List<int> intervalA, List<int> intervalB) {
    return intervalA[0] <= intervalB[1] && intervalB[0] <= intervalA[1];
  }

  List<List<int>> insert(List<List<int>> intervals, List<int> newInterval) {
    List<List<int>> mergedIntervals = [];
    List<int> merged = [newInterval[0], newInterval[1]];
    bool isInserted = false;

    for (List<int> interval in intervals) {
      if (interval[0] > merged[1]) {
        if (!isInserted) {
          mergedIntervals.add(merged);
          isInserted = true;
        }
        mergedIntervals.add(interval);
      } else {
        // does intersect
        if (doesIntersect(merged, interval)) {
          merged[0] = min(merged[0], interval[0]);
          merged[1] = max(merged[1], interval[1]);
        } else {
          // not intersecting
          mergedIntervals.add(interval);
        }
      }
    }

    // new interval is at the end
    if (!isInserted) {
      mergedIntervals.add(merged);
      isInserted = true;
    }

    // Java specific to copy to arr[][]...
    List.filled(mergedIntervals.length, 0).map((e) => List.filled(2, 0));
    List<List<int>> res = List.filled(mergedIntervals.length, 0)
        .map((e) => List.filled(2, 0))
        .toList();
    for (int i = 0; i < mergedIntervals.length; i++) {
      res[i] = mergedIntervals.elementAt(i);
    }
    return res;
  }
}