56. 合并区间(带有详细注释)

Array.sort()方法的一种用法(菜鸟第一次见),Array.sory(intervals,xxxx),后面的xxxx主要是看正负。

 Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0] - o2[0];
            }
        });

也有这么写的:

Array.sort(intervals,(o1,o2) -> o1[0]-o2[0]);

**

题目:

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

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[] nums1,int[] nums2)
		{
		return nums1[0]-nums2[0];
		}
		});
		//1.根据区间开始位置的大小,将intervals排序
		//可以使用lambda表达式。
		//Arrays.sort(intervals,(nums1,nums2)->nums1[0]-nums2[0]);
		//2.接下来创建一个新的二维数组,用于保存合并后的区间
		int index = -1;
		int[][] res = new int[intervals.length][2];//注意这里的二维数组比最后合并的大,因为行数是[intevals.length],所以到后面要减小。
		//3.遍历intevals数组里面的数组,
		for(int[] interval:intervals) {
			if(index==-1 || res[index][1]<interval[0]){
			res[++index]=interval;
			} else {
			res[index][1]=Math.max(res[index][1],interval[1]);
			}
		//4.正如前面2.中说到的,最后的结果比一开始定义的二维数组要小,所以要取index+1个,否则其他的都是[0,0]		
        }
    return Arrays.copyOf(res,index+1);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值