Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save SuryaPratapK/93da992cc6252085a68cabccff1e02db to your computer and use it in GitHub Desktop.
Save SuryaPratapK/93da992cc6252085a68cabccff1e02db to your computer and use it in GitHub Desktop.
class Solution {
public:
int maxFreeTime(int eventTime, int k, vector<int>& startTime, vector<int>& endTime) {
if(eventTime>endTime.back()){
startTime.push_back(eventTime);
endTime.push_back(eventTime);
}
int n = startTime.size();
int max_sum = 0;
int win_sum = 0;
int pos = 0;
int last_end = 0;
deque<int> dq;
while(pos<n){
win_sum += (startTime[pos]-last_end);
max_sum = max(max_sum,win_sum);
dq.push_back(startTime[pos]-last_end);
if(dq.size()>k){
win_sum -= dq.front();
dq.pop_front();
}
last_end = endTime[pos];
pos++;
}
return max_sum;
}
};
/*
//JAVA
import java.util.ArrayDeque;
import java.util.Deque;
class Solution {
public int maxFreeTime(int eventTime, int k, int[] startTime, int[] endTime) {
if (eventTime > endTime[endTime.length - 1]) {
int[] newStartTime = new int[startTime.length + 1];
int[] newEndTime = new int[endTime.length + 1];
System.arraycopy(startTime, 0, newStartTime, 0, startTime.length);
System.arraycopy(endTime, 0, newEndTime, 0, endTime.length);
newStartTime[startTime.length] = eventTime;
newEndTime[endTime.length] = eventTime;
startTime = newStartTime;
endTime = newEndTime;
}
int n = startTime.length;
int max_sum = 0;
int win_sum = 0;
int pos = 0;
int last_end = 0;
Deque<Integer> dq = new ArrayDeque<>();
while (pos < n) {
win_sum += (startTime[pos] - last_end);
dq.addLast(startTime[pos] - last_end);
max_sum = Math.max(max_sum, win_sum);
if (dq.size() > k) {
win_sum -= dq.removeFirst();
}
last_end = endTime[pos];
pos++;
}
return max_sum;
}
}
#Python
from collections import deque
class Solution:
def maxFreeTime(self, eventTime: int, k: int, startTime: list[int], endTime: list[int]) -> int:
if eventTime > endTime[-1]:
startTime.append(eventTime)
endTime.append(eventTime)
n = len(startTime)
max_sum = 0
win_sum = 0
pos = 0
last_end = 0
dq = deque()
while pos < n:
win_sum += (startTime[pos] - last_end)
dq.append(startTime[pos] - last_end)
max_sum = max(max_sum, win_sum)
if len(dq) > k:
win_sum -= dq.popleft()
last_end = endTime[pos]
pos += 1
return max_sum
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment