1@[toc]
所有题目源代码:Git地址
题目
给出一个区间的集合,请合并所有重叠的区间。
示例 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] 可被视为重叠区间。
方案:二维数组排序+遍历
class Solution {
public int[][] merge(int[][] intervals) {
//排序一下,根据数组的第一个元素排序
Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
int row = intervals.length;
if (row < 1) return new int[0][0];
int min = intervals[0][0];
int max = intervals[0][1];
ArrayList<int[]> res = new ArrayList<>( );
for (int i = 1; i < row; i++) {
if (max >= intervals[i][0]) {
if (min>intervals[i][0]) min = intervals[i][0];
if (max<intervals[i][1]) max = intervals[i][1];
} else {
//如果接不上,那就存一个
res.add(new int[]{min, max});
min = intervals[i][0];
max = intervals[i][1];
}
}
res.add(new int[]{min, max});
int[][] ans = new int[res.size()][2];
for(int i = 0;i<res.size();i++){
ans[i] = res.get(i);
}
return ans;
}
}
复杂度计算
- 时间复杂度:O(n)
- 空间复杂度:O(n)