力扣练习之合并区间

我爱海鲸 2023-04-02 00:27:06 力扣、中级算法

简介中级算法、排序和搜索

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xv11yj/

解法一:

class Solution {
 public int[][] merge(int[][] intervals) {
        if (intervals.length == 0) {
            return new int[0][2];
        }
        // 先按区间的起始位置进行排序
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);

        List<int[]> res = new ArrayList<>();
        int[] cur = intervals[0];
        for (int i = 1; i < intervals.length; i++) {
            // 当前区间的end >= 下一个区间的start,则合并区间
            if (cur[1] >= intervals[i][0]) {
                cur[1] = Math.max(cur[1], intervals[i][1]);
            } else {
                res.add(cur);
                cur = intervals[i];
            }
        }
        // 最后一个区间需要手动添加进去
        res.add(cur);

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

思路:先按区间的起始位置进行排序,然后依次合并区间。

你好:我的2025