LeetCode 729. 我的日程安排表 I(set 二分查找)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 set 二分查找
      • 2.2 差分思想

1. 题目

实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内没有其他安排,则可以存储这个新的日程安排。

MyCalendar 有一个 book(int start, int end)方法。
它意味着在 start 到 end 时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end

当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生重复预订。

每次调用 MyCalendar.book方法时,如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true。
否则,返回 false 并且不要将该日程安排添加到日历中。

请按照以下步骤调用 MyCalendar 类: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)

示例 1:
MyCalendar();
MyCalendar.book(10, 20); // returns true
MyCalendar.book(15, 25); // returns false
MyCalendar.book(20, 30); // returns true
解释: 
第一个日程安排可以添加到日历中. 
第二个日程安排不能添加到日历中,因为时间 15 已经被第一个日程安排预定了。
第三个日程安排可以添加到日历中,因为第一个日程安排并不包含时间 20 。说明:
每个测试用例,调用 MyCalendar.book 函数最多不超过 100次。
调用函数 MyCalendar.book(start, end)时, start 和 end 的取值范围为 [0, 10^9]

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/my-calendar-i
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:
LeetCode 731. 我的日程安排表 II(set二分查找 / 差分思想)
LeetCode 732. 我的日程安排表 III(差分思想)

2.1 set 二分查找

class MyCalendar {set<pair<int, int>> s;
public:MyCalendar() {}bool book(int start, int end) {if(s.empty()){s.insert({start, end});return true;}auto it = s.lower_bound({start,end});if(it == s.end()){auto it1 = it;it1--;//检查前面是否相交if(it1->second > start)return false;}else if(it == s.begin()){if(it->first < end)//检查当前是否相交return false;}else//前后都要检查{if(it->first < end)return false;it--;if(it->second > start)return false;}s.insert({start, end});return true;    }
};

200 ms 35.4 MB

class MyCalendar {set<pair<int, int>> s;
public:MyCalendar() {s.insert({INT_MAX, INT_MAX});s.insert({INT_MIN, INT_MIN});//加入边界,简化代码}bool book(int start, int end) {auto it = s.lower_bound({start,end});if(it->first < end)//当前是否相交return false;if((--it)->second > start)//前面是否相交return false;s.insert({start, end});return true;    }
};

200 ms 35.6 MB

2.2 差分思想

class MyCalendar {map<int,int> m;
public:MyCalendar() {}bool book(int start, int end) {m[start]++;//差分思想m[end]--;int count = 0;for(auto it = m.begin(); it != m.end(); ++it){count += it->second;if(count >= 2)//重叠2次了{m[start]--;//恢复原状m[end]++;return false;}}return true;}
};

916 ms 40.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java基础之lambda表达式

java基础之lambda表达式 1 什么是lambda表达式 lambda表达式是一个匿名函数&#xff0c;允许将一个函数作为另外一个函数的参数&#xff0c;将函数作为参数传递&#xff08;可理解为一段传递的代码&#xff09;。 2 为什么要用lambda表达式 lambda表达式可以写出更简洁更灵…

6.数据查询(条件

查询所有字段select * from 表名; 例&#xff1a;select * from students; 查询指定字段 在select后面的列名部分&#xff0c;可以使用as为列起别名&#xff0c;这个别名出现在结果集中 select 列1,列2,... from 表名; -- 表名.字段名 select students.id,students.name,su…

开源代码分析技巧之——打印调用逻辑

开源代码分析技巧之——打印调用逻辑 在研究开源代码时&#xff0c;大家或许都有这样的感慨&#xff1a; &#xff08;1&#xff09;代码太庞大&#xff0c;少则几万行代码&#xff0c;多则几百万行代码&#xff0c;不知道如何入手&#xff1b; &#xff08;2&#xff09;相关的…

LeetCode 731. 我的日程安排表 II(set二分查找 / 差分思想)

文章目录1. 题目2. 解题2.1 set 二分查找2.2 差分思想1. 题目 实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内不会导致三重预订时&#xff0c;则可以存储这个新的日程安排。 MyCalendar 有一个 book(int start, int end)方法。 它意味着在 start 到 end 时间…

7.排序、聚合函数、分组查询

排序 语法&#xff1a; select * from 表名 order by 列1 asc|desc,列2 asc|desc,... asc从小到大排列&#xff0c;即升序&#xff0c;也可不写&#xff1b; desc从大到小排序&#xff0c;即降序 例1&#xff1a;查询未删除男生信息&#xff0c;按学号降序 select * from…

JSON数据格式以及与后台交互数据转换实例

/*作者&#xff1a;烟大阳仔时间&#xff1a;20131013介绍:主要了解一下json的格式&#xff0c;看看数据是怎么存储的 */ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> &…

05.序列模型 W1.循环序列模型

文章目录1. 为什么选择序列模型2. 数学符号3. 循环Recurrent 神经网络模型4. 通过时间的反向传播5. 不同类型的循环神经网络6. 语言模型和序列生成7. 对新序列采样8. 循环神经网络的梯度消失9. Gated Recurrent Unit&#xff08;GRU单元&#xff09;10. LSTM&#xff08;long s…

8.分页、连接、自关联查询

获取部分行 语法 select * from 表名 limit start,count 从start开始&#xff0c;获取count条数据 start索引从0开始 例1&#xff1a;查询前3行男生信息 select * from students where gender1 limit 0,3; 分页 已知&#xff1a;每页显示m条数据&#xff0c;当前显示第n…

C语言宏定义取得两数的最大值和最小值

/*本程序时为了验证用宏来做 * 两个数的大小比较的写法*/#include<stdio.h>#define MAX(x,y) ((x)<(y)?(y):(x))#define MIN(X,Y) ({\ typeof (X) x_ (X);\ typeof (Y) y_ (Y);\ (x_ < y_) ? x_ : y_; })/*({...})的作用是将内部的几条语句中最后一条的值返回&…

9.数据库中的子查询

子查询 在一个 select 语句中,嵌入了另外一个 select 语句,那么被嵌入的 select 语句称之为子查询语句 主查询 主要查询的对象,第一条 select 语句 主查询和子查询的关系 子查询是嵌入到主查询中 子查询是辅助主查询的,要么充当条件,要么充当数据源 子查询是可以独立存在的语句…

LeetCode 802. 找到最终的安全状态(逆向图+拓扑排序)

文章目录1. 题目2. 解题1. 题目 在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走。 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止。 现在, 如果我们最后能走到终点&#xff0c;那么我们的起始节点是最终安全的。 更具体地说, 存在一个自然数 K…

oracle 重建 sys密码文件

需要重建密码文件,具体步骤如下: 1.首先,确定你的密码文件的路径和名称: 在windows下 密码文件路径oracle_home\database 密码文件名称pwdsid.ora 在unix下 密码文件路径oracle_home/dbs 密码文件名称pwdsid Sid为实例名称,查看实例名称 Select instance_name from v$in…

10.数据库中的内置函数

字符串函数 查看字符的ascii码值ascii(str)&#xff0c;str是空串时返回0 查看ascii码值对应的字符char(数字)&#xff1a;select char(97); 拼接字符串concat(str1,str2...)&#xff1a;selectconcat(12,34,ab); 包含字符个数length(str)&#xff1a;selectlength(abc); 截…

Java基础10(反射)

Java基础10&#xff08;反射&#xff09; 1 什么是反射 官方解释&#xff1a;反射&#xff08;reflection&#xff09;技术通常被用来检测和改变应用程序在 Java 虚拟机中的行为表现。它是一个相对而言比较高级的技术&#xff0c;反射是一种强有力的技术特性&#xff0c;因此…

05.序列模型 W1.循环序列模型(作业:手写RNN+恐龙名字生成)

文章目录作业1&#xff1a;建立你的循环神经网络1. RNN 前向传播1.1 RNN 单元1.2 RNN 前向传播2. LSTM 网络2.1 LSTM 单元2.2 LSTM 前向传播3. RNN 反向传播3.1 基础 RNN 反向传播3.2 LSTM 反向传播3.3 LSTM RNN网络反向传播作业2&#xff1a;字符级语言模型&#xff1a;恐龙岛…

给年轻工程师的十大忠告

给年轻工程师的十大忠告 转自http://blog.163.com/tgyeboy02126/blog/static/167507500201191102114940/诸位&#xff0c;咱当电子工程师也是十余年了&#xff0c;不算有出息&#xff0c;环顾四周&#xff0c;也没有看见几个有出息的&#xff01;回顾工程师生涯&#xff0c;感…

11.MYSQL高级(一)

1.账户管理 在生产环境下操作数据库时&#xff0c;绝对不可以使用root账户连接&#xff0c;而是创建特定的账户&#xff0c;授予这个账户特定的操作权限&#xff0c;然后连接进行操作&#xff0c;主要的操作就是数据的crud MySQL账户体系&#xff1a;根据账户所具有的权限的不…

SQL2008中Merge的用法

SQL2008中Merge的用法 在SQL2008中&#xff0c;新增了一个关键字&#xff1a;Merge&#xff0c;这个和Oracle的Merge的用法差不多&#xff0c;只是新增了一个delete方法而已。下面就是具体的使用说明&#xff1a; 首先是对merge的使用说明&#xff1a; merge [into][目标表]usi…

LeetCode 1146. 快照数组(哈希map + 有序map)

文章目录1. 题目2. 解题1. 题目 实现支持下列接口的「快照数组」- SnapshotArray&#xff1a; SnapshotArray(int length) - 初始化一个与指定长度相等的 类数组 的数据结构。初始时&#xff0c;每个元素都等于 0。void set(index, val) - 会将指定索引 index 处的元素设置为…

12.MYSQL高级(二)

1.视图&#xff08;重点 视图本质就是对查询的封装&#xff0c;定义视图&#xff0c;建议以v_开头 create view 视图名称 as select语句; 例&#xff1a;创建视图&#xff0c;查询学生对应的成绩信息 create view v_stu_sco as select students.*,scores.score from scores in…