Leetcode56:合并区间
- 题目:
- 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
- 思路:贪心算法
- 代码如下:
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> res = new LinkedList<int[]>();
Arrays.sort(intervals,(o1,o2)->Integer.compare(o1[0], o2[0]));
int n = intervals.length;
int start = intervals[0][0];
for(int i = 1; i < n; i++){
if(intervals[i][0]>intervals[i-1][1]){
//不会重叠
res.add(new int[]{start,intervals[i-1][1]});
start = intervals[i][0];
}else{
//重叠,取右边的最大边界
intervals[i][1] = Math.max(intervals[i][1],intervals[i-1][1]);
}
}
res.add(new int[]{start,intervals[n-1][1]});
return res.toArray(new int[res.size()][]);
}
}
|