贪心算法day9(合并区间)

1.合并区间

56. 合并区间 - 力扣(LeetCode)

对于这种区间问题,我们应该先排序根据排序的结果总结一些规律,进而的得出解决该问题的策略。

复制代码
class Solution {
      public static int[][] merge(int[][] intervals) {
        //第一步进行左端点排序
        Arrays.sort(intervals,(v1,v2)->{
            return v1[0] -v2[0];
        });
        //进行合并
        int left = intervals[0][0],right = intervals[0][1];
        List<int[]> ret = new ArrayList<>();
        for(int i = 1;i < intervals.length;i++){
            int a = intervals[i][0],b = intervals[i][1];
            if(a <= right){

                //left始终是最小的 right要更新为最大的才行
                right = Math.max(right,b);

            }else{
                //把前面的数字合并成一个新的数组 之后更新left right再次进行比较
                ret.add(new int[]{left,right});
                left = a;
                right = b;
            }
        }
        //如果最后一个数组的 a > right 更新 left 和 right 之后就无法再进入循环
        // 如果最后一组要合并的数字 a并没有大于right同样无法进入else合并数组
        // 所以最后要加入left right
        ret.add(new int[]{left,right});
        //把ret里面存的数组全部列出来
        return ret.toArray(new int[0][]);

    }
}
相关推荐
大龄Python青年1 小时前
C语言 交换算法之加减法,及溢出防范
c语言·开发语言·算法
啊我不会诶2 小时前
CF每日5题
算法
朱剑君3 小时前
排序算法——基数排序
算法·排序算法
COOCC13 小时前
PyTorch 实战:从 0 开始搭建 Transformer
人工智能·pytorch·python·深度学习·算法·机器学习·transformer
拾忆-eleven4 小时前
C++算法(19):整数类型极值,从INT_MIN原理到跨平台开发实战
数据结构·c++·算法
JK0x074 小时前
代码随想录算法训练营 Day39 动态规划Ⅶ 打家劫舍
算法·动态规划
blammmp5 小时前
算法专题四:前缀和
java·开发语言·算法
望未来无悔5 小时前
系统学习算法:动态规划(斐波那契+路径问题)
java·算法
明月看潮生5 小时前
青少年编程与数学 02-018 C++数据结构与算法 25课题、图像处理算法
c++·图像处理·算法·青少年编程·编程与数学
我是一只鱼02236 小时前
LeetCode算法题 (反转链表)Day17!!!C/C++
数据结构·c++·算法·leetcode·链表