Documentation ¶
Overview ¶
* @lc app=leetcode.cn id=729 lang=golang * * [729] 我的日程安排表 I * * https://leetcode.cn/problems/my-calendar-i/description/ * * algorithms * Medium (53.95%) * Likes: 123 * Dislikes: 0 * Total Accepted: 14.5K * Total Submissions: 26.8K * Testcase Example: '["MyCalendar","book","book","book"]\n[[],[10,20],[15,25],[20,30]]' * * 实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。 * * 当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生 重复预订 。 * * 日程可以用一对整数 start 和 end 表示,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < * end 。 * * 实现 MyCalendar 类: * * * MyCalendar() 初始化日历对象。 * boolean book(int start, int end) 如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true 。否则,返回 * false 并且不要将该日程安排添加到日历中。 * * * * * 示例: * * * 输入: * ["MyCalendar", "book", "book", "book"] * [[], [10, 20], [15, 25], [20, 30]] * 输出: * [null, true, false, true] * * 解释: * MyCalendar myCalendar = new MyCalendar(); * myCalendar.book(10, 20); // return True * myCalendar.book(15, 25); // return False ,这个日程安排不能添加到日历中,因为时间 15 * 已经被另一个日程安排预订了。 * myCalendar.book(20, 30); // return True ,这个日程安排可以添加到日历中,因为第一个日程安排预订的每个时间都小于 * 20 ,且不包含时间 20 。 * * * * 提示: * * * 0 <= start < end <= 10^9 * 每个测试用例,调用 book 方法的次数最多不超过 1000 次。 * *
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type MyCalendar ¶
type MyCalendar struct {
// contains filtered or unexported fields
}
func Constructor ¶
func Constructor() MyCalendar
func (*MyCalendar) Book ¶
func (m *MyCalendar) Book(start, end int) bool
type MyCalendar1 ¶
type MyCalendar1 struct {
*redblacktree.Tree
}
-----------------------1. 红黑树实现-------------------------- 作者:endlesscheng 链接:https://leetcode.cn/problems/my-calendar-i/solution/go-ping-heng-shu-by-endlesscheng-ihq4/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
func Constructor1 ¶
func Constructor1() *MyCalendar1
func (*MyCalendar1) Book ¶
func (c *MyCalendar1) Book(start, end int) bool
type MyCalendar2 ¶
type MyCalendar2 struct {
// contains filtered or unexported fields
}
题目的意思就是说两个数组之间不能有交叉的范围 而且0 <= start < end,即[start, end) 那我们可以自建一个二叉搜索树,依次插入树中 比较当前节点的max(注意max取不到,右边的数为开区间)是否小于等于给定的start,如果满足,往右子树找 比较当前节点的min是否大于等于给定的end(注意end取不到,右边的数为开区间),如果满足,往左子树找 最后看是否能插入一个新节点 如果插入不了,返回false 方法二为红黑树 floor为向下取,即查找小于或等给定的参数 ceiling为向上取,即查找大于或等给定的参数
作者:XiaoWei_Algorithm 链接:https://leetcode.cn/problems/my-calendar-i/solution/by-xiaowei_algorithm-qmyv/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
func Constructor2 ¶
func Constructor2() *MyCalendar2
func (*MyCalendar2) Book ¶
func (m *MyCalendar2) Book(start, end int) bool
min max -2 -1 10 20 0 10 20 30