Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 6c77a63

Browse files
committed
Add solution #732
1 parent 0448cdd commit 6c77a63

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

0732-my-calendar-iii.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* 732. My Calendar III
3+
* https://leetcode.com/problems/my-calendar-iii/
4+
* Difficulty: Hard
5+
*
6+
* A k-booking happens when k events have some non-empty intersection (i.e., there is some time
7+
* that is common to all k events.)
8+
*
9+
* You are given some events [startTime, endTime), after each given event, return an integer k
10+
* representing the maximum k-booking between all the previous events.
11+
*
12+
* Implement the MyCalendarThree class:
13+
* - MyCalendarThree() Initializes the object.
14+
* - int book(int startTime, int endTime) Returns an integer k representing the largest integer
15+
* such that there exists a k-booking in the calendar.
16+
*/
17+
18+
class MyCalendarThree {
19+
constructor() {
20+
this.events = [];
21+
}
22+
23+
/**
24+
* @param {number} startTime
25+
* @param {number} endTime
26+
* @returns {number}
27+
*/
28+
book(startTime, endTime) {
29+
this.insertTime(startTime, 1);
30+
this.insertTime(endTime, -1);
31+
let maxBookings = 1;
32+
let currentBookings = 0;
33+
this.events.forEach(event => maxBookings = Math.max(currentBookings += event[1], maxBookings));
34+
return maxBookings;
35+
}
36+
37+
/**
38+
* @param {number} targetTime
39+
* @param {number} value
40+
*/
41+
insertTime(targetTime, value) {
42+
const events = this.events;
43+
let left = 0;
44+
let right = events.length - 1;
45+
while (left <= right) {
46+
const mid = left + right >> 1;
47+
if (events[mid][0] < targetTime) left = mid + 1;
48+
else if (events[mid][0] > targetTime) right = mid - 1;
49+
else return events[mid][1] += value;
50+
}
51+
events.splice(left, 0, [targetTime, value]);
52+
}
53+
}

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,7 @@
555555
729|[My Calendar I](./0729-my-calendar-i.js)|Medium|
556556
730|[Count Different Palindromic Subsequences](./0730-count-different-palindromic-subsequences.js)|Hard|
557557
731|[My Calendar II](./0731-my-calendar-ii.js)|Medium|
558+
732|[My Calendar III](./0732-my-calendar-iii.js)|Hard|
558559
733|[Flood Fill](./0733-flood-fill.js)|Easy|
559560
735|[Asteroid Collision](./0735-asteroid-collision.js)|Medium|
560561
739|[Daily Temperatures](./0739-daily-temperatures.js)|Medium|

0 commit comments

Comments
 (0)