Skip to content

Commit 7624cb2

Browse files
committed
Add solution #1353
1 parent b001536 commit 7624cb2

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 1,249 LeetCode solutions in JavaScript
1+
# 1,250 LeetCode solutions in JavaScript
22

33
[https://leetcodejavascript.com](https://leetcodejavascript.com)
44

@@ -1028,6 +1028,7 @@
10281028
1349|[Maximum Students Taking Exam](./solutions/1349-maximum-students-taking-exam.js)|Hard|
10291029
1351|[Count Negative Numbers in a Sorted Matrix](./solutions/1351-count-negative-numbers-in-a-sorted-matrix.js)|Easy|
10301030
1352|[Product of the Last K Numbers](./solutions/1352-product-of-the-last-k-numbers.js)|Medium|
1031+
1353|[Maximum Number of Events That Can Be Attended](./solutions/1353-maximum-number-of-events-that-can-be-attended.js)|Medium|
10311032
1356|[Sort Integers by The Number of 1 Bits](./solutions/1356-sort-integers-by-the-number-of-1-bits.js)|Easy|
10321033
1358|[Number of Substrings Containing All Three Characters](./solutions/1358-number-of-substrings-containing-all-three-characters.js)|Medium|
10331034
1360|[Number of Days Between Two Dates](./solutions/1360-number-of-days-between-two-dates.js)|Easy|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/**
2+
* 1353. Maximum Number of Events That Can Be Attended
3+
* https://leetcode.com/problems/maximum-number-of-events-that-can-be-attended/
4+
* Difficulty: Medium
5+
*
6+
* You are given an array of events where events[i] = [startDayi, endDayi]. Every event i starts
7+
* at startDayi and ends at endDayi.
8+
*
9+
* You can attend an event i at any day d where startTimei <= d <= endTimei. You can only attend
10+
* one event at any time d.
11+
*
12+
* Return the maximum number of events you can attend.
13+
*/
14+
15+
/**
16+
* @param {number[][]} events
17+
* @return {number}
18+
*/
19+
var maxEvents = function(events) {
20+
events.sort((a, b) => a[0] - b[0]);
21+
const heap = [];
22+
let result = 0;
23+
let eventIndex = 0;
24+
let currentDay = 1;
25+
26+
while (eventIndex < events.length || heap.length) {
27+
while (eventIndex < events.length && events[eventIndex][0] <= currentDay) {
28+
heapPush(heap, events[eventIndex][1]);
29+
eventIndex++;
30+
}
31+
32+
while (heap.length && heap[0] < currentDay) {
33+
heapPop(heap);
34+
}
35+
36+
if (heap.length) {
37+
heapPop(heap);
38+
result++;
39+
}
40+
41+
currentDay++;
42+
}
43+
44+
function heapPush(arr, val) {
45+
arr.push(val);
46+
let i = arr.length - 1;
47+
while (i > 0) {
48+
const parent = Math.floor((i - 1) / 2);
49+
if (arr[parent] <= arr[i]) break;
50+
[arr[parent], arr[i]] = [arr[i], arr[parent]];
51+
i = parent;
52+
}
53+
}
54+
55+
function heapPop(arr) {
56+
const result = arr[0];
57+
arr[0] = arr[arr.length - 1];
58+
arr.pop();
59+
let i = 0;
60+
while (true) {
61+
const left = 2 * i + 1;
62+
const right = 2 * i + 2;
63+
let smallest = i;
64+
if (left < arr.length && arr[left] < arr[smallest]) smallest = left;
65+
if (right < arr.length && arr[right] < arr[smallest]) smallest = right;
66+
if (smallest === i) break;
67+
[arr[i], arr[smallest]] = [arr[smallest], arr[i]];
68+
i = smallest;
69+
}
70+
return result;
71+
}
72+
73+
return result;
74+
};

0 commit comments

Comments
 (0)