贪心算法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][]);

    }
}
相关推荐
努力也学不会java32 分钟前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
旖-旎1 小时前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
ECT-OS-JiuHuaShan1 小时前
朱梁万有递归元定理,重构《易经》
算法·重构
智者知已应修善业2 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
khddvbe2 小时前
C++并发编程中的死锁避免
开发语言·c++·算法
C羊驼2 小时前
C语言:两天打鱼,三天晒网
c语言·经验分享·笔记·算法·青少年编程
菜菜小狗的学习笔记2 小时前
剑指Offer算法题(四)链表
数据结构·算法·链表
myloveasuka2 小时前
[Java]查找算法&排序算法
java·算法·排序算法
清水白石0083 小时前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法
We་ct3 小时前
LeetCode 148. 排序链表:归并排序详解
前端·数据结构·算法·leetcode·链表·typescript·排序算法