leetcode Merge Intervals题解

题目描述:

Given a collection of intervals, merge all overlapping intervals.

Example 1:

Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].

Example 2:

Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.

中文理解:

给定一个二维数组n*2,二维数组每一个1*2元素含义上代表一个线段,给出所有线段的合并结果。

解题思路:

首先将二维数组按照第一个第一个维度排序,然后设置第一个数组元素为start和end,遍历二维数组,当数组元素的起始值小于end,更新end和数组元素的第二个至;当数组元素起始值大于end,则将start和end放入结果中,同时更新start和end为当前这个元素的值,依次进行即可。

代码(java):

class Solution {
    public int[][] merge(int[][] intervals) {
        if (intervals == null || intervals.length <= 1) return intervals;
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
        int start = intervals[0][0];
        int end = intervals[0][1];
        List<int[]> res = new ArrayList<>();

        for (int[] interval : intervals) {
            if (interval[0] <= end) {
                end = Math.max(end, interval[1]);
            } else {
                res.add(new int[]{start, end});
                start = interval[0];
                end = interval[1];
            }
        }
        res.add(new int[]{start, end});

        int[][] ans = new int[res.size()][2];

        for (int i = 0; i < res.size(); i++) {
            ans[i][0] = res.get(i)[0];
            ans[i][1] = res.get(i)[1];
        }

        return ans;
    }
        
}

猜你喜欢

转载自blog.csdn.net/leo_weile/article/details/90200169
今日推荐