LeetCode56. 區間合併 思路:先排序
阿新 • • 發佈:2018-11-14
給出一個區間的集合,請合併所有重疊的區間。
示例 1:
輸入: [[1,3],[2,6],[8,10],[15,18]] 輸出: [[1,6],[8,10],[15,18]] 解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].
示例 2:
輸入: [[1,4],[4,5]] 輸出: [[1,5]] 解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。
此題不難,但是若不預先排序則會增大思維量,遇到陣列類問題,應先考慮先排序,看是否能降低題目難度。
/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */ class Solution { public List<Interval> merge(List<Interval> intervals) { List<Interval> res=new ArrayList<>(); // 先排序 Collections.sort(intervals,new Comparator<Interval>(){ public int compare(Interval a, Interval b){ return a.start-b.start; } }); while(intervals.size()>0){ Interval inComp=new Interval(intervals.get(0).start,intervals.get(0).end); intervals.remove(0); for(int j=0;j<intervals.size();){ Interval inComp2=intervals.get(j); if(!(inComp.end<inComp2.start || inComp2.end<inComp.start)){ // 合併 inComp.start=Math.min(inComp.start,inComp2.start); inComp.end=Math.max(inComp.end,inComp2.end); intervals.remove(inComp2); } else j++; } res.add(inComp); } return res; } }