题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-intervals
给出一个区间的集合,请合并所有重叠的区间。
示例 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] 可被视为重叠区间。
思路:将左边界和右边界的数分别取出来放到两个数组中,从左向右遍历两个数组,如果左边界的数大于右边界的数,说明区间不能合并,反之就是可以合并,具体代码如下:
Java代码:
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals.length == 1)
return intervals;
int[] leftNums = new int[intervals.length];
int[] rightNums = new int[intervals.length];
for(int i=0;i<intervals.length;i++){
leftNums[i] = intervals[i][0];
rightNums[i] = intervals[i][1];
}
Arrays.sort(leftNums);
Arrays.sort(rightNums);
List<int[]> ans = new ArrayList<>();
if(leftNums.length > 0){
int left = 0;
while(left < leftNums.length){
int right = left + 1;
while(right < leftNums.length && leftNums[right] <= rightNums[right-1]){
right++;
}
if(right == leftNums.length){
int[] tmp = new int[]{leftNums[left],rightNums[right-1]};
ans.add(tmp);
break;
}
int[] tmp = new int[]{leftNums[left],rightNums[right-1]};
left = right;
ans.add(tmp);
}
}
int[][] res = new int[ans.size()][2];
return ans.toArray(res);
}
}