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

注意更新的时候只更新newInterval,然后最后再插进去就行了。 因为顺序无所谓。

 1 /**

 2  * Definition for an interval.

 3  * public class Interval {

 4  *     int start;

 5  *     int end;

 6  *     Interval() { start = 0; end = 0; }

 7  *     Interval(int s, int e) { start = s; end = e; }

 8  * }

 9  */

10 public class Solution {

11     public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {

12         // Note: The Solution object is instantiated only once and is reused by each test case.

13         ArrayList<Interval> results = new ArrayList<Interval>();

14         boolean sig = false;

15         for(int i = 0; i < intervals.size(); i ++)

16         {

17             if(intervals.get(i).end < newInterval.start)

18             {

19                 results.add(intervals.get(i));    

20             }

21             else

22             {

23                 newInterval.start = Math.min(newInterval.start, intervals.get(i).start);

24             }

25             if(intervals.get(i).start > newInterval.end)

26             {

27                 if(!sig)

28                 {

29                     results.add(newInterval);

30                     sig = true;

31                 }

32                 results.add(intervals.get(i));

33             }

34             else

35             {

36                 newInterval.end = Math.max(newInterval.end, intervals.get(i).end);

37             }

38         }

39         if(!sig)

40         {

41             results.add(newInterval);

42         }

43         return results;

44     }

45 }

第二遍:

不使用额外的存储空间:

 1 public class Solution {

 2     public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {

 3         // Note: The Solution object is instantiated only once and is reused by each test case.

 4         if(intervals == null || intervals.size() == 0){

 5             ArrayList<Interval> result = new ArrayList<Interval>(newInterval);

 6             result.add(newInterval); 

 7             return result;

 8         }

 9         for(int i = 0; i < intervals.size(); i ++){

10             if(i == 0)

11         }

12         intervals.get(0).start = intervals.get(0).start > newInterval.start ?  newInterval.start : intervals.get(0).start;

13         pq.add(newInterval);

14         result.add(pq.poll());//poll out the minimum element in the queue

15         int max_end = result.get(0).end;

16         while(pq.size() != 0){

17             Interval tmp = pq.poll();

18             if(tmp.start <= max_end){

19                 max_end = max_end > tmp.end ? max_end : tmp.end;

20                 result.get(result.size() - 1).end = max_end;

21             }else{

22                 result.add(tmp);

23                 max_end = tmp.end;

24             }

25         }

26         return result;

27     }

28 }

 

 

你可能感兴趣的:(insert)