2024-12-08 Daily Challenge
Today I have done leetcode's December LeetCoding Challenge with cpp
.
December LeetCoding Challenge 8
Description
Two Best Non-Overlapping Events
You are given a 0-indexed 2D integer array of events
where events[i] = [startTimei, endTimei, valuei]
. The ith
event starts at startTimei
and ends at endTimei
, and if you attend this event, you will receive a value of valuei
. You can choose at most two non-overlapping events to attend such that the sum of their values is maximized.
Return this maximum sum.
Note that the start time and end time is inclusive: that is, you cannot attend two events where one of them starts and the other ends at the same time. More specifically, if you attend an event with end time t
, the next event must start at or after t + 1
.
Example 1:
Input: events = [[1,3,2],[4,5,2],[2,4,3]] Output: 4 Explanation: Choose the green events, 0 and 1 for a sum of 2 + 2 = 4.
Example 2:
Input: events = [[1,3,2],[4,5,2],[1,5,5]] Output: 5 Explanation: Choose event 2 for a sum of 5.
Example 3:
Input: events = [[1,5,3],[1,5,1],[6,6,5]] Output: 8 Explanation: Choose events 0 and 2 for a sum of 3 + 5 = 8.
Constraints:
2 <= events.length <= 105
events[i].length == 3
1 <= startTimei <= endTimei <= 109
1 <= valuei <= 106
Solution
class Solution {
public:
int maxTwoEvents(vector<vector<int>>& events) {
sort(events.begin(), events.end());
vector<int> suffixMax(events.size());
suffixMax.back() = events.back()[2];
for(int i = events.size() - 2; i >= 0; --i) {
suffixMax[i] = max(events[i][2], suffixMax[i + 1]);
}
int answer = 0;
for(const auto &e : events) {
int low = 0;
int high = events.size() - 1;
while(low < high) {
int mid = (low + high) / 2;
if(events[mid][0] <= e[1]) {
low = mid + 1;
} else {
high = mid;
}
}
if(events[low][0] <= e[1]) {
answer = max(answer, e[2]);
} else {
answer = max(answer, e[2] +suffixMax[low]);
}
}
return answer;
}
};
// Accepted
// 63/63 cases passed (63 ms)
// Your runtime beats 71.62 % of cpp submissions
// Your memory usage beats 85.9 % of cpp submissions (124.3 MB)