Skip to content

Commit 9a16e97

Browse files
committed
Solution of 3440. in java , c++ , javascript done
1 parent 8e01f99 commit 9a16e97

File tree

5 files changed

+288
-3
lines changed

5 files changed

+288
-3
lines changed

solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README.md

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,78 @@ class Solution:
162162
#### Java
163163

164164
```java
165+
class Solution {
166+
public int maxFreeTime(int eventTime, int[] startTime, int[] endTime) {
167+
int n = startTime.length;
168+
int maxGapBefore = 0;
169+
int maxFreeTime = 0;
170+
int lastEnd = 0;
171+
for (int i = 0; i < n; i++) {
172+
int meetingTime = endTime[i] - startTime[i];
173+
int nextStart = (i == n - 1) ? eventTime : startTime[i + 1];
174+
int freeTime = nextStart - lastEnd;
175+
if (meetingTime > maxGapBefore) {
176+
freeTime -= meetingTime;
177+
}
178+
179+
maxFreeTime = Math.max(maxFreeTime, freeTime);
180+
maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd);
181+
lastEnd = endTime[i];
182+
}
183+
int maxGapAfter = 0;
184+
int lastStart = eventTime;
185+
for (int i = n - 1; i >= 0; i--) {
186+
int meetingTime = endTime[i] - startTime[i];
187+
int prevEnd = (i == 0) ? 0 : endTime[i - 1];
188+
int freeTime = lastStart - prevEnd;
189+
if (meetingTime <= maxGapAfter) {
190+
maxFreeTime = Math.max(maxFreeTime, freeTime);
191+
}
192+
maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]);
193+
lastStart = startTime[i];
194+
}
195+
return maxFreeTime;
196+
}
197+
}
165198

166199
```
167200

168201
#### C++
169202

170203
```cpp
171-
204+
class Solution {
205+
public:
206+
int maxFreeTime(int eventTime, vector<int>& startTime, vector<int>& endTime) {
207+
int n = startTime.size();
208+
int max_gap_before = 0;
209+
int last_end = 0;
210+
int max_free_time = 0;
211+
212+
for (int i = 0; i < n; ++i) {
213+
int meeting_time = endTime[i] - startTime[i];
214+
int next_start = (i == n - 1) ? eventTime : startTime[i + 1];
215+
int free_time = next_start - last_end;
216+
if (meeting_time > max_gap_before) free_time -= meeting_time;
217+
max_free_time = max(max_free_time, free_time);
218+
max_gap_before = max(max_gap_before, startTime[i] - last_end);
219+
last_end = endTime[i];
220+
}
221+
222+
int max_gap_after = 0;
223+
int last_start = eventTime;
224+
for (int i = n - 1; i >= 0; --i) {
225+
int meeting_time = endTime[i] - startTime[i];
226+
int prev_end = (i == 0) ? 0 : endTime[i - 1];
227+
int free_time = last_start - prev_end;
228+
if (meeting_time <= max_gap_after)
229+
max_free_time = max(max_free_time, free_time);
230+
max_gap_after = max(max_gap_after, last_start - endTime[i]);
231+
last_start = startTime[i];
232+
}
233+
234+
return max_free_time;
235+
}
236+
};
172237
```
173238

174239
#### Go
@@ -177,6 +242,37 @@ class Solution:
177242

178243
```
179244

245+
#### Javascript
246+
247+
```javascript
248+
var maxFreeTime = function(eventTime, startTime, endTime) {
249+
let n = startTime.length;
250+
let maxGapBefore = 0, maxFreeTime = 0, lastEnd = 0;
251+
252+
for (let i = 0; i < n; i++) {
253+
let duration = endTime[i] - startTime[i];
254+
let nextStart = (i === n - 1) ? eventTime : startTime[i + 1];
255+
let freeTime = nextStart - lastEnd;
256+
if (duration > maxGapBefore) freeTime -= duration;
257+
maxFreeTime = Math.max(maxFreeTime, freeTime);
258+
maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd);
259+
lastEnd = endTime[i];
260+
}
261+
262+
let maxGapAfter = 0, lastStart = eventTime;
263+
for (let i = n - 1; i >= 0; i--) {
264+
let duration = endTime[i] - startTime[i];
265+
let prevEnd = (i === 0) ? 0 : endTime[i - 1];
266+
let freeTime = lastStart - prevEnd;
267+
if (duration <= maxGapAfter)
268+
maxFreeTime = Math.max(maxFreeTime, freeTime);
269+
maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]);
270+
lastStart = startTime[i];
271+
}
272+
273+
return maxFreeTime;
274+
};
275+
```
180276
<!-- tabs:end -->
181277

182278
<!-- solution:end -->

solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README_EN.md

Lines changed: 98 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,13 +160,77 @@ class Solution:
160160
#### Java
161161

162162
```java
163-
163+
class Solution {
164+
public int maxFreeTime(int eventTime, int[] startTime, int[] endTime) {
165+
int n = startTime.length;
166+
int maxGapBefore = 0;
167+
int maxFreeTime = 0;
168+
int lastEnd = 0;
169+
for (int i = 0; i < n; i++) {
170+
int meetingTime = endTime[i] - startTime[i];
171+
int nextStart = (i == n - 1) ? eventTime : startTime[i + 1];
172+
int freeTime = nextStart - lastEnd;
173+
if (meetingTime > maxGapBefore) {
174+
freeTime -= meetingTime;
175+
}
176+
177+
maxFreeTime = Math.max(maxFreeTime, freeTime);
178+
maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd);
179+
lastEnd = endTime[i];
180+
}
181+
int maxGapAfter = 0;
182+
int lastStart = eventTime;
183+
for (int i = n - 1; i >= 0; i--) {
184+
int meetingTime = endTime[i] - startTime[i];
185+
int prevEnd = (i == 0) ? 0 : endTime[i - 1];
186+
int freeTime = lastStart - prevEnd;
187+
if (meetingTime <= maxGapAfter) {
188+
maxFreeTime = Math.max(maxFreeTime, freeTime);
189+
}
190+
maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]);
191+
lastStart = startTime[i];
192+
}
193+
return maxFreeTime;
194+
}
195+
}
164196
```
165197

166198
#### C++
167199

168200
```cpp
169-
201+
class Solution {
202+
public:
203+
int maxFreeTime(int eventTime, vector<int>& startTime, vector<int>& endTime) {
204+
int n = startTime.size();
205+
int max_gap_before = 0;
206+
int last_end = 0;
207+
int max_free_time = 0;
208+
209+
for (int i = 0; i < n; ++i) {
210+
int meeting_time = endTime[i] - startTime[i];
211+
int next_start = (i == n - 1) ? eventTime : startTime[i + 1];
212+
int free_time = next_start - last_end;
213+
if (meeting_time > max_gap_before) free_time -= meeting_time;
214+
max_free_time = max(max_free_time, free_time);
215+
max_gap_before = max(max_gap_before, startTime[i] - last_end);
216+
last_end = endTime[i];
217+
}
218+
219+
int max_gap_after = 0;
220+
int last_start = eventTime;
221+
for (int i = n - 1; i >= 0; --i) {
222+
int meeting_time = endTime[i] - startTime[i];
223+
int prev_end = (i == 0) ? 0 : endTime[i - 1];
224+
int free_time = last_start - prev_end;
225+
if (meeting_time <= max_gap_after)
226+
max_free_time = max(max_free_time, free_time);
227+
max_gap_after = max(max_gap_after, last_start - endTime[i]);
228+
last_start = startTime[i];
229+
}
230+
231+
return max_free_time;
232+
}
233+
};
170234
```
171235

172236
#### Go
@@ -175,6 +239,38 @@ class Solution:
175239

176240
```
177241

242+
#### Javascript
243+
244+
```javascript
245+
var maxFreeTime = function(eventTime, startTime, endTime) {
246+
let n = startTime.length;
247+
let maxGapBefore = 0, maxFreeTime = 0, lastEnd = 0;
248+
249+
for (let i = 0; i < n; i++) {
250+
let duration = endTime[i] - startTime[i];
251+
let nextStart = (i === n - 1) ? eventTime : startTime[i + 1];
252+
let freeTime = nextStart - lastEnd;
253+
if (duration > maxGapBefore) freeTime -= duration;
254+
maxFreeTime = Math.max(maxFreeTime, freeTime);
255+
maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd);
256+
lastEnd = endTime[i];
257+
}
258+
259+
let maxGapAfter = 0, lastStart = eventTime;
260+
for (let i = n - 1; i >= 0; i--) {
261+
let duration = endTime[i] - startTime[i];
262+
let prevEnd = (i === 0) ? 0 : endTime[i - 1];
263+
let freeTime = lastStart - prevEnd;
264+
if (duration <= maxGapAfter)
265+
maxFreeTime = Math.max(maxFreeTime, freeTime);
266+
maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]);
267+
lastStart = startTime[i];
268+
}
269+
270+
return maxFreeTime;
271+
};
272+
```
273+
178274
<!-- tabs:end -->
179275

180276
<!-- solution:end -->
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution {
2+
public:
3+
int maxFreeTime(int eventTime, vector<int>& startTime, vector<int>& endTime) {
4+
int n = startTime.size();
5+
int max_gap_before = 0;
6+
int last_end = 0;
7+
int max_free_time = 0;
8+
9+
for (int i = 0; i < n; ++i) {
10+
int meeting_time = endTime[i] - startTime[i];
11+
int next_start = (i == n - 1) ? eventTime : startTime[i + 1];
12+
int free_time = next_start - last_end;
13+
if (meeting_time > max_gap_before) free_time -= meeting_time;
14+
max_free_time = max(max_free_time, free_time);
15+
max_gap_before = max(max_gap_before, startTime[i] - last_end);
16+
last_end = endTime[i];
17+
}
18+
19+
int max_gap_after = 0;
20+
int last_start = eventTime;
21+
for (int i = n - 1; i >= 0; --i) {
22+
int meeting_time = endTime[i] - startTime[i];
23+
int prev_end = (i == 0) ? 0 : endTime[i - 1];
24+
int free_time = last_start - prev_end;
25+
if (meeting_time <= max_gap_after)
26+
max_free_time = max(max_free_time, free_time);
27+
max_gap_after = max(max_gap_after, last_start - endTime[i]);
28+
last_start = startTime[i];
29+
}
30+
31+
return max_free_time;
32+
}
33+
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution {
2+
public int maxFreeTime(int eventTime, int[] startTime, int[] endTime) {
3+
int n = startTime.length;
4+
int maxGapBefore = 0;
5+
int maxFreeTime = 0;
6+
int lastEnd = 0;
7+
for (int i = 0; i < n; i++) {
8+
int meetingTime = endTime[i] - startTime[i];
9+
int nextStart = (i == n - 1) ? eventTime : startTime[i + 1];
10+
int freeTime = nextStart - lastEnd;
11+
if (meetingTime > maxGapBefore) {
12+
freeTime -= meetingTime;
13+
}
14+
15+
maxFreeTime = Math.max(maxFreeTime, freeTime);
16+
maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd);
17+
lastEnd = endTime[i];
18+
}
19+
int maxGapAfter = 0;
20+
int lastStart = eventTime;
21+
for (int i = n - 1; i >= 0; i--) {
22+
int meetingTime = endTime[i] - startTime[i];
23+
int prevEnd = (i == 0) ? 0 : endTime[i - 1];
24+
int freeTime = lastStart - prevEnd;
25+
if (meetingTime <= maxGapAfter) {
26+
maxFreeTime = Math.max(maxFreeTime, freeTime);
27+
}
28+
maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]);
29+
lastStart = startTime[i];
30+
}
31+
return maxFreeTime;
32+
}
33+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var maxFreeTime = function(eventTime, startTime, endTime) {
2+
let n = startTime.length;
3+
let maxGapBefore = 0, maxFreeTime = 0, lastEnd = 0;
4+
5+
for (let i = 0; i < n; i++) {
6+
let duration = endTime[i] - startTime[i];
7+
let nextStart = (i === n - 1) ? eventTime : startTime[i + 1];
8+
let freeTime = nextStart - lastEnd;
9+
if (duration > maxGapBefore) freeTime -= duration;
10+
maxFreeTime = Math.max(maxFreeTime, freeTime);
11+
maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd);
12+
lastEnd = endTime[i];
13+
}
14+
15+
let maxGapAfter = 0, lastStart = eventTime;
16+
for (let i = n - 1; i >= 0; i--) {
17+
let duration = endTime[i] - startTime[i];
18+
let prevEnd = (i === 0) ? 0 : endTime[i - 1];
19+
let freeTime = lastStart - prevEnd;
20+
if (duration <= maxGapAfter)
21+
maxFreeTime = Math.max(maxFreeTime, freeTime);
22+
maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]);
23+
lastStart = startTime[i];
24+
}
25+
26+
return maxFreeTime;
27+
};

0 commit comments

Comments
 (0)