LeetCode-Array-【56】合并区间(Java)

题目描述:

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

解法:

思路

题目要求我们将重叠的部分合并在一起,首先我们规定int left = intervals[ i ][ 0 ];
int right = intervals[ i ][ 1];那么我们只需要判断出重叠的条件是:intervals[ i ][ 1 ]>intervals[ i+1 ][ 0 ],即可,如果这个条件成立,那么我们就将Math.max(right, intervals[i+1][1])中最大的数取出来,赋值给right。然后再循环判断i后面的数组所代表的区间是否和当前区间重合,重合就循环赋值,否则就加入到res中。

详细代码:
class Solution {
    
    
    public int[][] merge(int[][] intervals) {
    
    
       List<int[]> res = new ArrayList<>();
       if(intervals==null)  return res.toArray(new int[0][]);
       Arrays.sort(intervals, new Comparator<int[]>(){
    
    
       //将数组元素的第一个按照升序进行排序
           public int compare(int[] o1,int[] o2){
    
    
               return o1[0]-o2[0];
           }
       });
       int i =0;
       while(i<intervals.length){
    
    
           int left = intervals[i][0];
           int right = intervals[i][1];
           while(i<intervals.length-1&&right>=intervals[i+1][0]){
    
    
               right = Math.max(right, intervals[i+1][1]);
               i++;
           }
           res.add(new int[]{
    
    left,right});
           i++;
       }
       //将res转换为二维数组
       return res.toArray(new int[0][]);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41291067/article/details/103026976