標籤:leetcode java 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:
給定[1,3],[6,9],插入併合並[2,5] 得到[1,5],[6,9].
範例2:
給定[1,2],[3,5],[6,7],[8,10],[12,16],插入併合並[4,9] 得到 [1,2],[3,10],[12,16].
這是因為新的間隔數[4,9] 覆蓋了[3,5],[6,7],[8,10].
演算法分析:
* 結合方法《Merge Intervals》
* 新加入 newInterval ,重新排序後然後按照上面的方法就好
AC代碼:
<span style="font-size:12px;">public class Solution { public List<Interval> insert(List<Interval> intervals, Interval newInterval) { intervals.add(newInterval); if (intervals == null || intervals.size() <= 1) return intervals; return merge(intervals); } public static List<Interval> merge(List<Interval> intervals) { if (intervals == null || intervals.size() <= 1) return intervals; // sort intervals by using self-defined Comparator Collections.sort(intervals, new IntervalComparator()); ArrayList<Interval> result = new ArrayList<Interval>(); Interval prev = intervals.get(0); for (int i = 1; i < intervals.size(); i++) { Interval curr = intervals.get(i); if (prev.end >= curr.start) { // merged case Interval merged = new Interval(prev.start, Math.max(prev.end, curr.end)); prev = merged; } else { result.add(prev); prev = curr; } } result.add(prev); return result; }}class IntervalComparator implements Comparator<Interval>{ public int compare(Interval i1, Interval i2) { return i1.start - i2.start; }}</span>
著作權聲明:本文為博主原創文章,轉載註明出處
[LeetCode][Java] Insert Interval