LeetCode 252 会议室题全解析:Swift 实现 + 场景还原


文章目录

摘要

在这篇文章中,我们将深入探讨LeetCode第252题"会议室"的问题,提供一个用Swift编写的解决方案,并结合实际场景进行分析。通过这篇文章,你将了解如何判断一个人是否可以参加所有会议,以及相关的时间和空间复杂度分析。

描述

问题描述:给定一个包含多个会议时间间隔的数组,每个间隔由开始时间和结束时间组成,判断一个人是否可以参加所有的会议。

示例1

txt 复制代码
输入:[[0,30],[5,10],[15,20]]
输出:false

示例2

txt 复制代码
输入:[[7,10],[2,4]]
输出:true

题解答案

要判断一个人是否可以参加所有会议,关键在于检查会议时间是否有重叠。具体步骤如下:

  1. 排序:首先,根据会议的开始时间对所有会议进行排序。
  2. 检查重叠 :然后,遍历排序后的会议,检查当前会议的开始时间是否早于前一个会议的结束时间。如果是,则说明有重叠,返回false

题解代码分析

以下是用Swift实现的解决方案:

swift 复制代码
func canAttendMeetings(_ intervals: [[Int]]) -> Bool {
    guard intervals.count > 1 else {
        return true
    }
    
    let sortedIntervals = intervals.sorted { $0[0] < $1[0] }
    
    for i in 1..<sortedIntervals.count {
        if sortedIntervals[i][0] < sortedIntervals[i - 1][1] {
            return false
        }
    }
    
    return true
}

代码分析

  • 边界检查 :如果会议数量少于2个,直接返回true,因为一个会议或没有会议都不存在时间冲突的问题。
  • 排序 :使用sorted方法根据每个会议的开始时间对数组进行排序。
  • 遍历检查 :从第二个会议开始,检查当前会议的开始时间是否小于前一个会议的结束时间。如果是,说明时间有重叠,返回false

示例测试及结果

让我们通过几个测试用例来验证上述函数的正确性:

swift 复制代码
let meetings1 = [[0,30],[5,10],[15,20]]
print(canAttendMeetings(meetings1)) // 输出:false

let meetings2 = [[7,10],[2,4]]
print(canAttendMeetings(meetings2)) // 输出:true

let meetings3 = [[1,5],[5,10],[10,15]]
print(canAttendMeetings(meetings3)) // 输出:true

结果分析

  • 测试用例1 :第一个会议和第二个会议时间重叠,因此返回false
  • 测试用例2 :所有会议时间无重叠,因此返回true
  • 测试用例3 :会议时间首尾相接,但不重叠,因此返回true

时间复杂度

  • 排序:对会议数组进行排序的时间复杂度为O(n log n),其中n是会议的数量。
  • 遍历检查:遍历排序后的数组进行检查的时间复杂度为O(n)。

因此,总的时间复杂度为O(n log n)。

空间复杂度

如果排序是就地进行的,空间复杂度为O(1)。否则,排序可能需要O(n)的额外空间。

总结

通过对会议时间进行排序并检查相邻会议时间是否重叠,我们可以高效地判断一个人是否可以参加所有会议。这种方法在处理日程安排冲突等实际场景中非常实用。

相关推荐
Dave.B20 分钟前
用【vtk3DLinearGridCrinkleExtractor】快速提取3D网格相交面
算法·3d·vtk
一起养小猫20 分钟前
LeetCode100天Day1-字符串匹配与Z字形变换
java·leetcode
yaoh.wang27 分钟前
力扣(LeetCode) 1: 两数之和 - 解法思路
python·程序人生·算法·leetcode·面试·跳槽·哈希算法
Code Slacker43 分钟前
LeetCode Hot100 —— 滑动窗口(面试纯背版)(四)
数据结构·c++·算法·leetcode
brave and determined1 小时前
CANN训练营 学习(day8)昇腾大模型推理调优实战指南
人工智能·算法·机器学习·ai实战·昇腾ai·ai推理·实战记录
总爱写点小BUG1 小时前
打印不同的三角形(C语言)
java·c语言·算法
yaoh.wang1 小时前
力扣(LeetCode) 27: 移除元素 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·双指针
2401_841495642 小时前
【自然语言处理】中文 n-gram 词模型
人工智能·python·算法·自然语言处理·n-gram·中文文本生成模型·kneser-ney平滑
San302 小时前
从零到一:彻底搞定面试高频算法——“列表转树”与“爬楼梯”全解析
javascript·算法·面试
F_D_Z2 小时前
最长连续序列(Longest Consecutive Sequence)
数据结构·算法·leetcode