LeetCode_56.合并區間
給出一個區間的集合,請合并所有重疊的區間。
示例 1:
輸入: intervals = [[1,3],[2,6],[8,10],[15,18]] 輸出: [[1,6],[8,10],[15,18]] 解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].
示例 2:
輸入: intervals = [[1,4],[4,5]] 輸出: [[1,5]] 解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。
注意:輸入類型已于2019年4月15日更改。 請重置默認代碼定義以獲取新方法簽名。
提示:
intervals[i][0] <= intervals[i][1]
C#代碼
public class Solution {
public int[][] Merge(int[][] intervals)
{
if (intervals.Length == 0)
{
return intervals;
}
/*基于每個區間左邊界完成數組排序,保證區間左邊界越小的越靠近左邊。*/
intervals = intervals.OrderBy(p => p[0]).ToArray();
/*遍歷數組,比較相鄰區間是否能合并。如果左區間的右邊界不小于右區間的左邊界,則左右區間可以合并。*/
List<int[]> list = new List<int[]>();
for (int i = 0; i < intervals.Length - 1; i++)
{
/*
左區間的右邊界不小于右區間的左邊界,則區間可以合并。將右區間作為合并后結果,
則更新右區間的左邊界為左區間的左邊界。
*/
if (intervals[i][1] >= intervals[i + 1][0])
{
intervals[i + 1][0] = intervals[i][0];
/*左區間的右邊界不小于右區間的右邊界,則右區間的右邊界更新為左區間的右邊界。*/
if (intervals[i][1] >= intervals[i + 1][1])
{
intervals[i + 1][1] = intervals[i][1];
}
}
/*左區間的右邊界小于右區間的左邊界,則左區間不能與右區間合并,將左區間添加到結果數組中。*/
else
{
list.Add(intervals[i]);
}
}
/*將數組中最后一個元素添加到結果中。*/
list.Add(intervals[intervals.Length - 1]);
int[][] result = list.ToArray();
return result;
}
}

浙公網安備 33010602011771號