56. 合并区间

题目

返回不重叠的区间数组,这个数组刚好覆盖输入中的所有区间

https://leetcode-cn.com/problems/merge-intervals/

思路

把intervals里面的区间排序,然后使用ArrayList存储区间,直接比较ArrayList的最后一个区间a 和intervals里面下一个区间 b ,如果不重叠直接假如,如果重叠的话修改a 

⚠️ 修改最后一个区间的时候要考虑 a b 可能是相交,也可能是 a 完全包含 b,所以最后一个区间的右端点需要取最大值

代码

class Solution {
    public int[][] merge(int[][] intervals) {
        //排序
        Arrays.sort(intervals, (interval1, interval2) -> interval1[0] - interval2[0]);
        ArrayList<int[]> result = new ArrayList<int[]>();

        for (int i = 0; i < intervals.length; i ++) {
            int left = intervals[i][0];
            int right = intervals[i][1];

            if (result.size() ==0 || result.get(result.size() - 1)[1] < left){
                result.add(new int[]{left, right});
            }
            else{
                result.get(result.size() - 1)[1] = Math.max(result.get(result.size() - 1)[1],right);
            }
        }

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

 

上一篇:小白教你合并区间


下一篇:【力扣56-合并区间】排序+模拟(python3)