diff options
Diffstat (limited to 'my_calendar.c')
-rw-r--r-- | my_calendar.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/my_calendar.c b/my_calendar.c new file mode 100644 index 0000000..b415d6e --- /dev/null +++ b/my_calendar.c @@ -0,0 +1,46 @@ +// 729. My Calendar I +#include "leetcode.h" + +/* + * 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 (ie. some moment is + * common to both events.). the event can be represented as a pair of integers + * 'start' and 'end' that represent a booking on the half open interval '[start, + * end)', the range of real numbers 'x' such that 'start <= x < end'. + */ + +typedef struct { + int *date; + int idx; +} MyCalendar; + +MyCalendar *myCalendarCreate() { + MyCalendar *n = (MyCalendar *)malloc(sizeof(MyCalendar)); + n->date = (int *)malloc(2000 * sizeof(int)); + n->idx = 0; + return n; +} + +bool myCalendarBook(MyCalendar *obj, int start, int end) { + for (int i = 0; i < obj->idx; i += 2) + if (obj->date[i] < end && start < obj->date[i + 1]) + return false; + obj->date[obj->idx] = start; + obj->date[obj->idx + 1] = end; + obj->idx += 2; + return true; +} + +void myCalendarFree(MyCalendar *obj) { + free(obj->date); + free(obj); +} + +int main() { + MyCalendar *obj = myCalendarCreate(); + printf("%d\n", myCalendarBook(obj, 10, 20)); // expect: 1 + printf("%d\n", myCalendarBook(obj, 15, 25)); // expect: 0 + printf("%d\n", myCalendarBook(obj, 20, 30)); // expect: 1 + myCalendarFree(obj); +} |