Insert Interval leetcode java


題目

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

 

題解:

這道題不僅要insert newInterval同時還要保證能夠merge。那么就分情況討論。

遍歷每一個已給出的interval,

當當前的interval的end小於newInterval的start時,說明新的區間在當前遍歷到的區間的后面,並且沒有重疊,所以res添加當前的interval;

當當前的interval的start大於newInterval的end時,說明新的區間比當前遍歷到的區間要前面,並且也沒有重疊,所以把newInterval添加到res里,並更新newInterval為當前的interval;

當當前的interval與newInterval有重疊時,merge interval並更新新的newInterval為merge后的。

 

代碼如下:

 

 1      public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
 2         ArrayList<Interval> res =  new ArrayList<Interval>();
 3             
 4          for(Interval each: intervals){
 5              if(each.end < newInterval.start){
 6                 res.add(each);
 7             } else  if(each.start > newInterval.end){
 8                 res.add(newInterval);
 9                 newInterval = each;        
10             } else  if(each.end >= newInterval.start || each.start <= newInterval.end){
11                  int nstart = Math.min(each.start, newInterval.start);
12                  int nend = Math.max(newInterval.end, each.end);
13                 newInterval =  new Interval(nstart, nend);
14             }
15         }
16  
17         res.add(newInterval); 
18  
19          return res;
20     }

 Reference://http://www.programcreek.com/2012/12/leetcode-insert-interval/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM