【2025刷题笔记】- 会议室占用时间

刷题笔记合集🔗

会议室占用时间

问题描述

现有若干个会议,所有会议共享一个会议室,用数组表示各个会议的开始时间和结束时间,格式为:

[[会议1开始时间, 会议1结束时间], [会议2开始时间, 会议2结束时间]]

请计算会议室占用时间段。

输入格式

第一行输入一个整数 ,表示会议数量。

之后输入 行,每行两个整数,以空格分隔,分别表示会议开始时间,会议结束时间。

输出格式

输出多行,每行两个整数,以空格分隔,分别表示会议室占用时间段开始和结束。

样例输入

4
1 4
2 5
7 9
14 18
2
1 4
4 5

样例输出

1 5
7 9
14 18
1 5

数据范围

  • (会议室个数范围)
样例 解释说明
样例1 输入:[[1,4],[2,5],[7,9],[14,18]] 输出:[[1,5],[7,9],[14,18]]
说明:时间段[1,4]和[2,5]重叠,合并为[1,5]
样例2 输入:[[1,4],[4,5]] 输出:[[1,5]]
说明:时间段[1,4]和[4,5]连续

题解

这道题目本质上是一个区间合并问题。我们需要将重叠或者连续的会议时间合并成一个完整的占用时间段。

解题思路很直观:

  1. 首先将所有会议按照开始时间进行升序排序
  2. 遍历排序后的会议时间,判断相邻会议是否存在重叠或连续情况
  3. 如果存在重叠或连续,则合并这些时间段
  4. 如果不存在重叠或连续,则记录前一个时间段,并继续处理后面的会议

具体来说,我们可以取出第一个区间作为基准值pre,从第二个区间cur开始遍历:

  • 如果cur的开始时间 <= pre的结束时间,说明两个区间有重叠或连续,应该合并
  • 合并的方式是取两个区间的最大结束时间作为新区间的结束时间
  • 如果cur的开始时间 > pre的结束时间,说明两个区间无交集,此时将pre记录为一个独立的会议室占用时间,并将cur作为新的基准值

举个例子,假设输入[[1,4],[2,5],[7,9],[14,18]]:

  1. 排序后依然是[[1,4],[2,5],[7,9],[14,18]]
  2. pre=[1,4],cur=[2,5],由于2<=4,两个区间有重叠,合并为[1,5]
  3. pre=[1,5],cur=[7,9],由于7>5,两个区间无重叠,记录[1,5],更新pre=[7,9]
  4. pre=[7,9],cur=[14,18],由于14>9,两个区间无重叠,记录[7,9],更新pre=[14,18]
  5. 最后记录[14,18]

这个算法的时间复杂度是O(nlogn),主要是排序的时间复杂度。空间复杂度是O(n),用于存储合并后的结果。

对于给定的数据范围,这个时间复杂度是完全可以接受的。

参考代码

  • Python
import sys
input = lambda:sys.stdin.readline().strip()

# 读取会议数量
n = int(input())

# 读取所有会议时间
meets = []
for _ in range(n):
    s, e = map(int, input().split())
    meets.append([s, e])

# 按会议开始时间排序
meets.sort(key=lambda x: x[0])

# 合并重叠的会议时间
def merge_times(meets):
    # 存储结果数组
    res = []
    # 取第一个区间作为初始值
    cur = meets[0]
    
    # 遍历剩余区间
    for i in range(1, len(meets)):
        # 如果当前区间的开始时间小于等于前一个区间的结束时间,合并区间
        if meets[i][0] <= cur[1]:
            # 更新结束时间为两个区间结束时间的最大值
            cur[1] = max(cur[1], meets[i][1])
        else:
            # 如果没有重叠,将前一个区间加入结

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

最近群里有很多同学找我看简历,问问题,主要就是集中在明年三月份的暑期,我暑期还能进大厂嘛?我接下来该怎么做?对于我来说,我对于双非找实习的一个暴论就是title永远大于业务,你在大厂随随便便做点慢SQL治理加个索引,可能就能影响几千人,在小厂你从零到一搭建的系统可能只有几十个人在使用,量级是不一样的。对双非来说,最难的就是约面,怎么才能被大厂约面试?首先这需要一点运气,另外你也需要好的实习带给你的背书。有很多双非的同学在一些外包小厂待了四五个月,这样的产出有什么用呢?工厂的可视化大屏业务很广泛?产出无疑是重要的,但是得当你的实习公司到了一定的档次之后,比如你想走后端,那么中厂后端和大厂测开的选择,你可以选择中厂后端(注意,这里的中厂也得是一些人都知道的,比如哈啰,得物,b站之类,不是说人数超过500就叫中厂),只有这个时候你再去好好关注你的产出,要不就无脑大厂就完了。很多双非同学的误区就在这里,找到一份实习之后,就认为自己达到了阶段性的任务,根本不再投递简历,也不再提升自己,玩了几个月之后,美其名曰沉淀产出,真正的好产出能有多少呢?而实际上双非同学的第一份实习大部分都是工厂外包和政府外包!根本无产出可写😡😡😡!到了最后才发现晚了,所以对双非同学来说,不要放过任何一个从小到中,从中到大的机会,你得先有好的平台与title之后再考虑你的产出!因为那样你才将将能过了HR初筛!我认识一个双非同学,从浪潮到海康,每一段都呆不久,因为他在不断的投递和提升自己,最后去了美团,这才是双非应该做的,而我相信大部分的双非同学,在找到浪潮的那一刻就再也不会看八股,写算法,也不会打开ssob了,这才是你跟别人的差距。
迷茫的大四🐶:我也这样认为,title永远第一,只有名气大,才有人愿意了解你的简历
双非本科求职如何逆袭
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务