java leetcode之[中等]56. 合并区间

题目的链接在这里:https://leetcode-cn.com/problems/merge-intervals/


题目大意

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

一、示意图

在这里插入图片描述

二、解题思路

贪心加数组原地修改

贪心加数组原地修改

代码如下:

class Solution {
     public int[][] merge(int[][] intervals) {
        /**
         * 贪心加数组原地修改
         */
        //先根据左边界来进行排序 //第二个参数是 Comparator 这个是lambda
    /*    Arrays.sort(intervals,(o1,o2)->{
            return o1[0]-o2[0];
        });*/
        /**
         * 刚好复习一下 Comparator的这个compare函数 compare函数返回值是 int 当他大于0 的时候两个才进行交换 所以o1-o2是一种升序
         * Arrays的sort函数则就是 调用了 从o-intervals.length这个方向
         *  TimSort.sort(a, 0, a.length, c, null, 0, 0);
         */
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0]-o2[0];
            }
        });
        List<int[]> res=new LinkedList<>();

        int start=intervals[0][0];
        for(int i=1;i<intervals.length;i++){
            //说明这两个数组不能合并 那就把开始的不能合并的位置放入到存储结果中 并进行更新
            if(intervals[i][0]>intervals[i-1][1]){
                res.add(new int[]{start,intervals[i-1][1]});
                //然后更新start
                start=intervals[i][0];
            }else{
                //说明可以合并 那就更新尾巴
                intervals[i][1]=Math.max(intervals[i][1],intervals[i-1][1]);
            }
        }
        //最后更新一波
        res.add(new int[]{start,intervals[intervals.length-1][1]});
        return res.toArray(new int[res.size()][]);
    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值