当前位置: 首页 > article >正文

合并区间(56)

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

解法:

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) 
    {
        if (intervals.size() == 1) {
            return intervals;
        }

        //现根据每一项的第一个值,进行排序
        sort(intervals.begin(), 
            intervals.end(), 
            [](vector<int> & left, vector<int> & right) {
                return left.front() < right.front();
            }
        );

        int cur_left = intervals[0].front();
        int cur_right = intervals[0].back();
        int cur_index = 0;

        for (int i = 1; i < intervals.size(); ++i) {
            //i项的最小值大于前面已经合并项的最大值,无法继续合并,输出一个新的区间
            if (intervals[i].front() > cur_right) {
                intervals[cur_index++] = {cur_left, cur_right};
                cur_left = intervals[i].front();
                cur_right = intervals[i].back();
            }{
                //和前项的区间合并
                cur_right = max(cur_right, intervals[i].back());
            }
        }

        //添加最后一个区间
        intervals[cur_index++] = {cur_left, cur_right};
        //数据截断
        intervals.resize(cur_index);

    
        return intervals;
    }
};

总结:

时间计算复杂度O(NlogN)---sort 排序,空间复杂度O(1),不需要重新构建数组,这里面通过cur_index记录intervals数组的当前填充位置,算法细节见注释。


http://www.kler.cn/a/557774.html

相关文章:

  • 在群晖上使用Docker安装思源笔记
  • 力扣每日一题【算法学习day.132】
  • React进阶之前端业务Hooks库(二)
  • 【Java基础-49.1】Java线程池之FixedThreadPool:使用、原理与应用场景详解
  • 【个人开源】——从零开始在高通手机上部署sd(一)
  • ath9k(Atheros芯片)开源驱动之wifi连接
  • 探寻 AI 发展新航道:下一个 “S 曲线” 的突破点在哪?
  • 蓝桥杯 1.语言基础
  • 深蓝学院自主泊车第3次作业-IPM
  • SQL面试题集:识别互相关注的用户
  • 八股文实战之JUC:静态方法的锁和普通方法的锁
  • go json处理 encoding/json 查询和修改gjson/sjson
  • java开发工程师面试技巧
  • 对计算机中缓存的理解和使用Redis作为缓存
  • LeetCode 2506.统计相似字符串对的数目:哈希表+位运算
  • Trae+Qt+MSVC环境配置
  • 运筹说 第132期 | 矩阵对策的基本理论
  • PostgreSQL:更新字段慢
  • 索引与Redis 知识点
  • 易飞ERP查询报表提示:报表档的字段数为21但要写到报表档的字段数为42;报表没有信息;;