From 0bd6894a704cd5751dea242c8273f13f80d1c01d Mon Sep 17 00:00:00 2001 From: Eat-Swap Date: Tue, 5 Jul 2022 23:51:14 +0800 Subject: [PATCH] add: 220705-CN --- cpp/2207/220705-CN.cpp | 33 +++++++++++++++++++++++++++++++++ cpp/2207/CMakeLists.txt | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 cpp/2207/220705-CN.cpp diff --git a/cpp/2207/220705-CN.cpp b/cpp/2207/220705-CN.cpp new file mode 100644 index 0000000..be8d945 --- /dev/null +++ b/cpp/2207/220705-CN.cpp @@ -0,0 +1,33 @@ +#include +#include + +/** + * 729. My Calendar I + * You are implementing a program to use as your calendar. We can add a new event if adding the event will not cause a double booking. + * A double booking happens when two events have some non-empty intersection (i.e., some moment is common to both events.). + * The event can be represented as a pair of integers start and end that represents a booking on the half-open interval [start, end), the range of real numbers x such that start <= x < end. + * Implement the MyCalendar class: + * MyCalendar() Initializes the calendar object. + * boolean book(int start, int end) Returns true if the event can be added to the calendar successfully without causing a double booking. Otherwise, return false and do not add the event to the calendar. + */ + +class MyCalendar { +private: + std::set> s; + +public: + MyCalendar() = default; + + bool book(int start, int end) { + if (s.empty()) { + s.insert({start, end}); + return true; + } + auto it = s.lower_bound({end, -1}); + if (it == s.begin() || std::prev(it)->second <= start) { + s.insert({start, end}); + return true; + } + return false; + } +}; diff --git a/cpp/2207/CMakeLists.txt b/cpp/2207/CMakeLists.txt index 282f09d..d766f7c 100644 --- a/cpp/2207/CMakeLists.txt +++ b/cpp/2207/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2207) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2207 220704-CN.cpp) +ADD_EXECUTABLE(2207 220705-CN.cpp)