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

【LeetCode合并区间C++实现】【c++】【合并区间】

LeetCode合并区间C++实现

      • LeetCode 56题
        • 思路
        • 图示
        • 完整代码
        • 运行结果
        • 代码或思路哪里有误还请指正!!thank you!!

LeetCode 56题

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
思路

1.我们首先可以对数据进行排序。

2.把排序后的数据的第一组区间先放到结果集中,如果后续需要合并,可以直接在结果集中进行合并。

3.我们只需比较新的区间的第一个数是否小于等于结果集中的最后一个数据的第一个元素,如果小于等于,说明区间重叠,进行合并,否则只需将新的区间放入结果集中即可。

图示

在这里插入图片描述

完整代码
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
vector<vector<int>> ve;     // 存储区间
vector<vector<int>> result; // 存放合并后的结果
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        vector<int> temp;
        int l, r;
        cin >> l >> r;
        temp.push_back(l);
        temp.push_back(r);
        ve.push_back(temp);
    }
    sort(ve.begin(), ve.end()); // 先进行排序
    result.push_back(ve[0]);    // 第一组可以直接放入结果集中,后续若需要合并再直接在result中进行合并。
    // 遍历
    // 列子:[1,2],[2,4],[5,6][7,8],[7,9]
    for (int i = 1; i < ve.size(); i++)
    {
        if (result.back()[1] >= ve[i][0])
        { // 需要合并
            result.back()[1] = max(result.back()[1], ve[i][1]);
        }
        else
        {
            // 不需要合并,直接放入
            result.push_back(ve[i]);
        }
    }

    // 验证,这一步可省略,这里只是检查是否正确
    for (int i = 0; i < result.size(); i++)
    {
        for (int j = 0; j < result[i].size(); j++)
        {
            cout << result[i][j] << " ";
        }
        cout << endl;
    }
    cout << "合并后区间数:" << result.size() << endl;
    system("pause");
    return 0;
}
运行结果

在这里插入图片描述

代码或思路哪里有误还请指正!!thank you!!

相关文章:

  • javase集合框架List篇
  • ds回答 什么是数据召回
  • 【数据结构】二叉搜索树、平衡搜索树、红黑树
  • 【初探数据结构】带环链表:原理、判断与数学证明
  • 使用 Switch Plus 将 ADTS 文件转为 MP3 格式简单教程
  • 「mysql」Mac mysql一路畅通式安装
  • Linux基础开发工具—vim
  • 【JavaEE】SpringBoot快速上手,探秘 Spring Boot,搭建 Java 项目的智慧脚手架
  • 软件工程:软件开发之需求分析
  • volatile限定符
  • XXE靶机详细通关攻略(flag)
  • 订阅指南:用关键指标驱动业务增长
  • 小白学Agent技术[5](Agent框架)
  • Java多线程编程实战:synchronized与Lock锁对比
  • 【Mastering Vim 2_11】第八章:玩转 Vimscript(下)—— 从零开始打造一个 Vim9 插件(含完整发布流程)
  • Docker介绍和安装
  • 「MySQL 数据库优化」降低存储与查询成本的最佳实践
  • 【计算机组成原理】第三章 存储系统
  • 第八届蓝桥杯单片机省赛
  • 【08】单片机变量命名规范指南
  • 公安部:“五一”假期全国社会大局稳定,治安秩序良好
  • 新闻1+1丨多地政府食堂开放“舌尖上的服务”,反映出怎样的理念转变?
  • 新华社:让历史照鉴未来
  • 中国驻美国使领馆提醒在美中国公民注意交通安全
  • 马上评|提供情绪价值,也是文旅经济的软实力
  • 魔都眼|西岸国际咖啡生活节:连接艺术、音乐与宠物