美文网首页
合并区间

合并区间

作者: 二进制的二哈 | 来源:发表于2019-12-11 21:43 被阅读0次

    题目来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/merge-intervals

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

    示例 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] 可被视为重叠区间。
    

    思路:将左边界和右边界的数分别取出来放到两个数组中,从左向右遍历两个数组,如果左边界的数大于右边界的数,说明区间不能合并,反之就是可以合并,具体代码如下:
    Java代码:

    class Solution {
        public int[][] merge(int[][] intervals) {
            if(intervals.length == 1)
                return intervals;
            int[] leftNums = new int[intervals.length];
            int[] rightNums = new int[intervals.length];
            for(int i=0;i<intervals.length;i++){
                leftNums[i] = intervals[i][0];
                rightNums[i] = intervals[i][1];
            }
            Arrays.sort(leftNums);
            Arrays.sort(rightNums);
            List<int[]> ans = new ArrayList<>();
            if(leftNums.length > 0){
                int left = 0;
                while(left < leftNums.length){
                    int right = left + 1;
                    while(right < leftNums.length && leftNums[right] <= rightNums[right-1]){
                        right++;
                    }
                    if(right == leftNums.length){
                        int[] tmp = new int[]{leftNums[left],rightNums[right-1]};
                        ans.add(tmp);
                        break;
                    }
                    int[] tmp = new int[]{leftNums[left],rightNums[right-1]};
                    left = right;
                    ans.add(tmp);
                }
            }
            int[][] res = new int[ans.size()][2];
            return ans.toArray(res);
    
        }
    }
    

    相关文章

      网友评论

          本文标题:合并区间

          本文链接:https://www.haomeiwen.com/subject/sbwagctx.html