自学内容网 自学内容网

【数组】【自定义排序】Leetcode 56. 合并区间

【数组】【自定义排序】Leetcode 56. 合并区间

---------------🎈🎈56. 合并区间 题目链接🎈🎈-------------------
在这里插入图片描述


在这里插入图片描述

解法1

进行二维数组按照第一维度升序排序:Arrays.sort( nums, (o1,o2) -> o1[0]-o2[0] )
如果排序后下一个的首端,大于result中的后端,那么就添加其整体到result的尾部
如果排序后下一个的首端,小于等于result中的后端,那么就可以合并二者,再去判断后端和result后端的大小
–如果下一个的后端,大于result中的后端,那么就更新result中的后端为下一个的后端
–如果下一个的后端,小于等于result中的后端,那么就不改变result
输出指定范围的数组:Arrays.copyOf( result, 长度)

class Solution {
    public int[][] merge(int[][] intervals) {
        int[][] result = new int[intervals.length][2];

        // 先按照区间起始位置排序
        Arrays.sort(intervals,(o1,o2) -> o1[0]-o2[0]);
        result[0] = new int[]{intervals[0][0],intervals[0][1]};
        int j = 0;
        for(int i=1; i < intervals.length; i++){
            if(intervals[i][0] > result[j][1]){ // 如果下一个的首端,大于result中的后端,那么就添加其到result的尾部
                result[++j] = intervals[i];
            }
            else{ // 如果下一个的首端,小于等于result中的后端,那么就可以合并二者,再去判断后端和result后端的大小
                if(intervals[i][1] > result[j][1]){ // 如果下一个的后端,大于result中的后端,那么就更新result中的后端为下一个的后端
                    result[j][1] = intervals[i][1];
                }
                else{// 如果下一个的后端,小于等于result中的后端,那么就不改变result
                    continue;
                }

            }

        }
        return Arrays.copyOf(result, j+1);
   }
}        
    

原文地址:https://blog.csdn.net/prince0520/article/details/137737137

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!