56. 合併區間
阿新 • • 發佈:2018-11-10
給出一個區間的集合,請合併所有重疊的區間。
示例 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] 可被視為重疊區間。
思路:
直接對資料進行排序,排序可以使用工具方法Arrary.Sort(T[], Comparison<T> comparison)
/** * Definition for an interval. * public class Interval { * public int start; * public int end; * public Interval() { start = 0; end = 0; } * public Interval(int s, int e) { start = s; end = e; } * } */ public class Solution { public IList<Interval> Merge(IList<Interval> intervals) { if (intervals.Count == 0 || intervals == null) return intervals; //對區間進行排序 Interval[] intervalsarr = intervals.ToArray(); Array.Sort(intervalsarr, MyCompare); List<Interval> mergeIntervals = new List<Interval>(); Interval temp = intervalsarr[0]; //儲存上一個區域 mergeIntervals.Add(temp); //每次將陣列中的區域和前一個做比較,如果不可以合併則新增,可以合併則改變temp的end值 for (int i = 1; i < intervalsarr.Length; i++) { if (temp.end >= intervalsarr[i].start) { if (temp.end < intervalsarr[i].end) { temp.end = intervalsarr[i].end; } } else { mergeIntervals.Add(intervalsarr[i]); temp = intervalsarr[i]; } } return mergeIntervals; } //比較兩個區間大小 public int MyCompare(Interval i1, Interval i2) { return i1.start - i2.start; } }