leetcode
leetcode 201 ~ 250
会议室

会议室

难度:

标签:

题目描述

代码结果

运行时间: 23 ms, 内存: 18.1 MB


解释

方法:

这个题解的思路是先将区间按照开始时间进行排序,然后遍历排序后的区间列表,检查相邻两个区间是否存在重叠。如果某两个相邻区间的结束时间大于下一个区间的开始时间,说明存在重叠,返回 False。如果遍历完整个列表都没有发现重叠,则返回 True,表示可以参加所有会议。

时间复杂度:

O(nlogn)

空间复杂度:

O(1)

代码细节讲解

🦆
如果存在多个连续的会议重叠,这种方法是否仍然有效?
是的,这种方法仍然有效。算法首先按照会议的开始时间对会议进行排序。这样做的目的是为了确保任何可能的重叠都会在相邻的会议之间出现。然后,算法遍历排序后的会议列表,比较当前会议的结束时间与下一个会议的开始时间。如果任何一个会议的结束时间大于下一个会议的开始时间,就意味着存在重叠。这种检查方式不仅适用于两个相邻的会议,也有效地处理了多个连续会议重叠的情况,因为每一对相邻会议都会被检查。
🦆
在你的算法中,是如何处理仅有一个会议或没有会议的情况的?
在这个算法中,如果会议列表为空(即没有会议),或者只有一个会议,算法都会返回 True。这是因为在这两种情况下,不存在任何相邻的会议对来检查重叠。具体来说,如果会议列表为空,算法中的 for 循环不会执行,因为它是基于列表长度的(len(intervals)-1 会小于 0),所以直接返回 True。如果列表中只有一个会议,同样因为没有相邻的会议对,for 循环也不会执行,因此也会返回 True。这样处理是符合逻辑的,因为没有会议或只有一个会议时,自然不会有重叠问题。

相关问题

合并区间

以数组 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 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

会议室 II

会议室 II