56.合并区间(java)

题目描述:

1.先判断给定intervals是否为空或者大小是否为1,是则直接返回intervals。

2.对intervals进行排序

        数组形式则使用:Arrays.sort(intevals,(a,b)->Integer.compare(a[0],b[0]));

        ArrayList形式:intervals.sort((a,b)->Integer.compare(a[0],b[0]));

3.创建结果集存储合并后的区间,将第一个区间添加到res,然后开始遍历intervals数组比较合并

数组形式:ArrayList<int[]> res = new ArrayList<>();

定义区间节点形式:ArrayList<Interval> res = new ArrayList<>();

                public class Interval{

                        int start;

                        int end;

                        Interval(){start=0;end=0;}

                        Interval(int s,int e) {start=s;end=e}

                 }

4.开始比较(以数组形式为例)

        for(int i=1;i<intervals.length;i++){

                int[] a=intervals[i];

                int[] b=res.get(res.size()-1);  // 拿结果集的最后一个区间进行比较

                if(b[1]<a[0])   //无法合并,直接将数组a加入到res结果集

                        res.add(a);

                else

                        b[1]=Math.max(a[1],b[1]);     // 合并,更新右区间

         }

5.返回结果(以数组为例)

        return res.toArray(new int[res.size()][]);

class Solution {
    public int[][] merge(int[][] intervals) {
        // 首先区间是否为空和是否为一个区间
		ArrayList<int[]> res = new ArrayList<>();
		if(intervals.length==0||intervals.length==1)
			return intervals;
		// 排序
		Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));
		res.add(intervals[0]);
		for(int i=1;i<intervals.length;i++){
			int[] a=intervals[i];
			int[] b=res.get(res.size()-1);
			if(b[1]<a[0]) res.add(a);
			else b[1]=Math.max(a[1],b[1]);
		}
		return res.toArray(new int[res.size()][]);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值