编程语言
首页 > 编程语言> > leetcode hot100合并区间 Java

leetcode hot100合并区间 Java

作者:互联网

题目描述
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

思路:

  1. 如果数组的长度为0或者1,则直接返回该数组
  2. 初始化count用于计数合并了多少次
  3. 遍历数组,相邻两个元素intervals[i]和intervals[j],如果 intervals[i][1] >= intervals[j][0] && intervals[i][0] <= intervals[j][1],说明intervals[i]和intervals[j]可以合并,再判断:如果intervals[i]第一个元素的值小于intervals[j]第一个元素的值,则将intervals[i]第一个元素的值赋给intervals[j],如果intervals[i]第二个元素的值大于intervals[j]第二个元素的值,则将intervals[i]第二个元素的值赋给intervals[j]【目的就是更新intervals[j],让将intervals[j]的范围更大,intervals[i]赋值为null】
  4. 再new一个新数组,将intervals非null的值全赋给新数组,返回该新数组

代码:

class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals.length <=1){
            return intervals;
        }
        int count = 0;
        for(int i = 0;i<intervals.length;i++){
            for(int j = i+1;j<intervals.length;j++){
                if(intervals[i][1] >= intervals[j][0] && intervals[i][0] <= intervals[j][1]){
                    if(intervals[i][0] < intervals[j][0]){
                        intervals[j][0] = intervals[i][0];
                    }
                    if(intervals[i][1] > intervals[j][1]){
                        intervals[j][1] = intervals[i][1];
                    }
                    count++;
                    intervals[i] = null;
                    break;
                }
            }
        }
        int[][] res = new int[intervals.length-count][];
        for(int i = 0,j=0;i<intervals.length;i++){
            if(intervals[i]!=null){
                res[j++] = intervals[i];
            }
        }
        return res;

    }
}

标签:count,Java,int,元素,intervals,hot100,数组,null,leetcode
来源: https://blog.csdn.net/stonney/article/details/114416946