leetcode算法练习【56】合并区间

1@[toc]

所有题目源代码:Git地址

题目

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3][2,6] 重叠, 将它们合并为 [1,6].
示例 2:

输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4][4,5] 可被视为重叠区间。

方案:二维数组排序+遍历

class Solution {
        public int[][] merge(int[][] intervals) {
            //排序一下,根据数组的第一个元素排序
            Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
            int row = intervals.length;
            if (row < 1) return new int[0][0];
            int min = intervals[0][0];
            int max = intervals[0][1];
            ArrayList<int[]> res = new ArrayList<>( );
            for (int i = 1; i < row; i++) {
                if (max >= intervals[i][0]) {
                    if (min>intervals[i][0]) min = intervals[i][0];
                    if (max<intervals[i][1]) max = intervals[i][1];
                } else {
                    //如果接不上,那就存一个
                    res.add(new int[]{min, max});
                    min = intervals[i][0];
                    max = intervals[i][1];
                }
            }
            res.add(new int[]{min, max});
            int[][] ans = new int[res.size()][2];
            for(int i = 0;i<res.size();i++){
                ans[i] = res.get(i);
            }
            return ans;
        }
    }
复杂度计算
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
原创文章 179 获赞 270 访问量 34万+

猜你喜欢

转载自blog.csdn.net/symuamua/article/details/106166727