Leetcode---合併區間--利用Comparator
阿新 • • 發佈:2018-12-27
合併區間
題目連結:合併區間
思路:
- 這道題乍一看沒什麼頭緒,不知從何下手,先看兩個區間的合併,例如[1,3]和[2,6],怎麼判斷是否可以合併呢?當時我想的是,2在[1,3]之間,那麼就可以合併,那麼也就是下一個區間的start在當前區間的範圍內就可以合併,但是如果顛倒了呢?顯然就不正確了,即[2,6],[1,3],此時1不在[2,6]內。
- 那麼這裡發現的歸律就是要先對區間的start排序,然後再判斷區間是否可以合併。
- 這裡出現的問題是,怎麼對區間進行排序呢?javaSE中就學過使用繼承Comparator類即可。
- 當出現區間不能合併時就將前一個區間存入結果集,使得每次只對兩個區間進行合併操作。
public static List<Interval> merge(List<Interval> intervals) {
if(intervals.size()==0) {
return intervals;
}
List<Interval> result = new ArrayList<Interval>();
Collections.sort(intervals,new CompareInterval());//對集合進行排序
int left = intervals.get(0).start,right = intervals.get(0).end;
//遍歷集合
for(int i=1;i<intervals.size();i++) {
if(intervals.get(i).start>=left&&intervals.get(i).start<=right) {
right = Math.max(right, intervals.get(i).end);
}else {
Interval temp = new Interval(left,right);
result.add(temp);
left = intervals. get(i).start;
right = intervals.get(i).end;
}
}
Interval temp = new Interval(left,right);
result.add(temp);
return result;
}
下面要另寫一個比較類,或者通過內部類嵌入上面程式碼的類中也可以。
class CompareInterval implements Comparator<Interval>{
@Override
public int compare(Interval a, Interval b) {
return a.start-b.start;
}
}