56. 合并区间

56. 合并区间

解题思路:先将intervals数组按左边界从小到大排序,要是下一个区间的左边界小于或等于区间的右边界,说明这两个区间可以合并成一个区间,同时更新右边界的值为两个右边界中的最大值,比如[1,5],[2,3],[4,5]可以合并成[1,5]。先将[1,5],[2,3]合并成[1,5],再合并[4,5]为[1,5]。

class Solution {
    public int[][] merge(int[][] intervals) {
        List<int[]> res = new ArrayList<>();
        // 按左边界从小到大排序
        Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0]));
        int left = intervals[0][0];
        int right = intervals[0][1];
        for (int i = 1; i < intervals.length; i ++) {
            // 如果左边界的值小于最大右边界的值,说明区间可以合并,同时更新最大右边界的值
            if (intervals[i][0] <= right) {
                right = Math.max(right, intervals[i][1]);
            }
            // 否则,加入结果集,同时初始化left,right
            else {
                res.add(new int[]{left, right});
                left = intervals[i][0];
                right = intervals[i][1];
            }
        }
        // 加入最后一个的合并区间
        res.add(new int[]{left, right});
        return res.toArray(new int[res.size()][]);
    }
}
class Solution {
    public static int[][] merge(int[][] intervals) {
        List<int[]> res = new ArrayList<>();
        // 按左边界从小到大排序
        Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0]));
        // 先加入一个区间,再判断下一个区间是否可以合并
        res.add(intervals[0]);
        for (int i = 1; i < intervals.length; i ++) {
            // 如果左边界小于或等于最大右边界,说明可以合并区间,同时更新最大右边界的值
            if (res.get(res.size() - 1)[1] >= intervals[i][0]) {
                res.get(res.size() - 1)[1] = Math.max(res.get(res.size() - 1)[1], intervals[i][1]);
            } else {
                res.add(intervals[i]);
            }
        }
        return res.toArray(new int[res.size()][]);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值