56. 合并区间

1、题目描述

 2、题目解析

合并区间的逻辑,第一个区间的结束位置  ≤  第二个区间的起始位置,就可以进行这两个区间的合并,同理,合并N个区间,就是合并N-1个两两区间即可。

【贪心算法思路】区间重叠问题的处理,首先左边界排序,排序之后局部最优:每次合并都取【最大的右边界】,这样就可以合并更多的区间了,最后合并所有重叠的区间。

实现步骤:
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。

具体代码如下:

class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals.length == 0) return new int[0][2];
 
        //对intervals进行区间排序,按照区间左边进行生序
        Arrays.sort(intervals, new Comparator<int[]>(){
           @Override
           public int compare(int[] t1, int[] t2){
              return t1[0]-t2[0];
           }
        });

        int[][] res = new int[intervals.length][2];
        //进行初始化,初始化区间跟intervals的第一个区间一致
        res[0][0] = intervals[0][0];
        res[0][1] = intervals[0][1];
        //设置res当前区间的下标
        int index  = 0;
        for(int i = 1; i < intervals.length; i++){
          //intervals的下一个区间【左】跟res的当前区间的【右】是否重合
          if(res[index][1] >= intervals[i][0]){
             //进行合并
             res[index][1] = Math.max(res[index][1],intervals[i][1]);
          }else{
             //添加新区间
             index++;
             res[index][0] = intervals[i][0];
             res[index][1] = intervals[i][1];
          }
        }
        //此时结果res(合并后的),真实区间长度为index+1
        return Arrays.copyOf(res, index+1);
    }
}

复杂度分析

时间复杂度:O(nlogn),其中 n 为区间的数量。除去排序的开销,我们只需要一次线性扫描,所以主要的时间开销是排序的 O(nlogn)。

空间复杂度:O(logn),其中 n 为区间的数量。这里计算的是存储答案之外,使用的额外空间。O(logn) 即为排序所需要的空间复杂度。

【备注】上面代码两处难点:

1、给区间段进行排序

        //对intervals进行区间排序,按照区间左边进行生序
        Arrays.sort(intervals, new Comparator<int[]>(){
           @Override
           public int compare(int[] t1, int[] t2){
              return t1[0]-t2[0];
           }
        });

2、返回数组的前N个元素

Arrays.copyOf(res, index+1);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值