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

方法:排序

        我们可以将区间按照左端点升序排列在遍历区间进行合并操作。当答案数组中最后一个区间的右端点小于我们所考虑的区间的左端点,说明两个区间不会重合。我们直接将当前区间加入数组末尾。否则,进行比较将答案数组的最右点放入二者的最大值。

代码如下:

class Solution {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals,(a,b) ->a[0] - b[0]);//也可使用【Arrays.sort(intervals,Comparator.comparingInt(o->o[0]));】
        
        List<int []> ans = new ArrayList<>();
        ans.add(intervals[0]);
        for(int i = 1; i < intervals.length; ++i)
        {
            int s = intervals[i][0],e = intervals[i][1];
            if(ans.get(ans.size()-1)[1]<s)
            {
                ans.add(intervals[i]);
            }
            else
            {
                ans.get(ans.size()-1)[1] = Math.max(ans.get(ans.size()-1)[1],e);
            }
        }
        return ans.toArray(new int[ans.size()][]);
    }
}

简单易懂版:

class Solution {
    public int[][] merge(int[][] intervals) {
     Arrays.sort(intervals,(a,b) -> a[0] - b[0]);
     List<int[]>res = new ArrayList<>();
     for(int i = 1; i < intervals.length;i++)
     {
         if(intervals[i][0] <= intervals[i-1][1])
         {
             intervals[i]=new int[]
             {
                 intervals[i-1][0],Math.max(intervals[i-1][1], intervals[i][1])
             };           
         }
         else
         {
             res.add(intervals[i-1]);
         }
        
     }
      res.add(intervals[intervals.length-1]);
         int[][] arr = new int[res.size()][];
         for(int i = 0; i < res.size(); i++) 
            arr[i] = res.get(i);
        return arr;
    }
}

补充相关知识

lambada表达式也可称为闭包,它是Java 8 发布的最重要新特性。

语法:(parameters) -> expression 或  (parameters) ->{ statements; }

1、paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明,也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号

2、->:可理解为“被用于”的意思

3、方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不返回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不返回

闭包的意思:

闭包就是将一些行为封装,把它当作一个对象一样传来传去,并且它依就可以访问到原来第一次声明时的上下文。

闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。

toArray()

这种方式将会把集合中的元素复制到一个Object类型的数组中,并返回该数组。

数组类型的定义不能使用基本类型,因为ArrayList里面只能放引用类型,不能放基本类型,如int[ 0] 就会报错(我们可以使用Integer[ 0 ]).但是可以返回int [ ] [ ] ,因为Java中的二维数组int [ ] [ ]可以看成存放在int [  ] 的数组,而int  [ ] 是引用类型

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值