leetcode-每日一题729. 我的日程安排表 I

简介: 我们把安排成功的日程插入到日历切片里,Book方法只需要遍历日历切片,如果存在时间交叉的日程则直接返回 false, 没有则将日程插入到日历切片当中,返回true

b441e26bd16c4587a6b1358474b45574.png


目链接:https://leetcode.cn/problems/my-calendar-i/

思路


1.直接遍历,我们把安排成功的日程插入到日历切片里,Book方法只需要遍历日历切片,如果存在时间交叉的日程则直接返回 false, 没有则将日程插入到日历切片当中,返回true


代码示例


type pair struct {
    start int
    end int
}
type MyCalendar []pair
func Constructor() MyCalendar {
    return MyCalendar{}
}
func (this *MyCalendar) Book(start int, end int) bool {
    for _, p := range *this{
        if p.end > start && p.start < end{
            return false
        }
    }
    *this = append(*this, pair{start, end})
    return true
}
/**
 * Your MyCalendar object will be instantiated and called as such:
 * obj := Constructor();
 * param_1 := obj.Book(start,end);
 */

495090e665554df283be5be068aeac9d.png


复杂度分析


  • 时间复杂度:O(n2) 其中 n 表示日程安排的数量。由于每次在进行预订时,都需要遍历所有已经预订的行程安排。


  • 空间复杂度:O(n) 其中 n 表示日程安排的数量,需要保存所有已经预订的行程。
目录
相关文章
|
6月前
|
SQL 算法 vr&ar
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
|
JavaScript 前端开发
leetcode 1418.点菜展示表(JavaScript)
leetcode 1418.点菜展示表(JavaScript)
42 0
leetcode-每日一题731. 我的日程安排表 II
题目需要我们判断在重复的预定时间里,有三重预定的返回false,那我们可以定义一个pair结构体用来表示时间段,MyCalendarTwo结构体用来存成功预定的时间段booked切片,和有重复预定的时间段overlaps切片,overlaps切片用来判断新进的时间段是否跟overlaps有重合预定的情况,若有则返回false,没有则true
109 0
leetcode-每日一题731. 我的日程安排表 II
leetcode【哈希表—简单】383.赎金信 II
leetcode【哈希表—简单】383.赎金信 II
leetcode【哈希表—简单】383.赎金信 II
leetcode【哈希表—中等】454.四数相加 II
leetcode【哈希表—中等】454.四数相加 II
leetcode【哈希表—中等】454.四数相加 II
|
存储 容器
LeetCode contest 185 1418. 点菜展示表
LeetCode contest 185 1418. 点菜展示表
|
存储 测试技术
LeetCode每日一题——729. 我的日程安排表 I
实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。
111 0
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行