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

合并区间(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数组的当前填充位置,算法细节见注释。

相关文章:

  • [创业之路-321]:创新开拓思维和经营管理思维的比较
  • rkipc main.c 中 rk_param_init函数分析
  • vue3项目开发总结
  • Java 12~14 新特性
  • 力扣LeetCode: 2506 统计相似字符串对的数目
  • 围棋打谱应用软件设计制作
  • C++ Primer 容器库概述
  • RocketMq\Kafka如何保障消息不丢失?
  • 【微服务优化】ELK日志聚合与查询性能提升实战指南
  • 【多线程】线程安全
  • [LeetCode]day27 28. 找出字符串中第一个匹配项的下标
  • 音视频入门基础:RTP专题(10)——FFmpeg源码中,解析RTP header的实现
  • Docker仿真宇树狗GO1
  • Spring Security+JWT+Redis实现项目级前后端分离认证授权
  • 【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)
  • 深入解析适配器模式:软件架构中的接口协调大师
  • printf和 vprintf的区别
  • MongoDB学习
  • CASS11快捷键设置
  • 国内三大知名开源批发订货系统对比
  • 上海优化营商环境再攻坚,企业和机构有哪些切实感受?
  • 两部上戏学生作品亮相俄罗斯“国际大学生戏剧节”
  • 绿城约13.93亿元竞得西安浐灞国际港港务片区地块,区内土地楼面单价首次冲破万元
  • 首批18位!苏联籍抗日航空英烈信息更新
  • 复旦设立新文科发展基金,校友曹国伟、王长田联合捐赠1亿元
  • 陈丹燕:赤龙含珠