diff --git a/solution/1300-1399/1394.Find Lucky Integer in an Array/README.md b/solution/1300-1399/1394.Find Lucky Integer in an Array/README.md index e2aab03d4d2ff..96a556368cd36 100644 --- a/solution/1300-1399/1394.Find Lucky Integer in an Array/README.md +++ b/solution/1300-1399/1394.Find Lucky Integer in an Array/README.md @@ -101,18 +101,26 @@ class Solution: ```java class Solution { public int findLucky(int[] arr) { - int[] cnt = new int[501]; + int[] cnt = new int[510]; + + // Count frequency of each number in arr for (int x : arr) { - ++cnt[x]; + cnt[x]++; } - for (int x = cnt.length - 1; x > 0; --x) { - if (x == cnt[x]) { - return x; + + int ans = -1; + + // Check for lucky numbers + for (int x = 1; x < cnt.length; ++x) { + if (cnt[x] == x) { + ans = x; } } - return -1; + + return ans; } } + ``` #### C++ diff --git a/solution/1300-1399/1394.Find Lucky Integer in an Array/README_EN.md b/solution/1300-1399/1394.Find Lucky Integer in an Array/README_EN.md index cf0c8ede706fc..5bd215732c95f 100644 --- a/solution/1300-1399/1394.Find Lucky Integer in an Array/README_EN.md +++ b/solution/1300-1399/1394.Find Lucky Integer in an Array/README_EN.md @@ -85,18 +85,24 @@ class Solution: ```java class Solution { public int findLucky(int[] arr) { - int[] cnt = new int[501]; + int[] cnt = new int[510]; + for (int x : arr) { - ++cnt[x]; + cnt[x]++; } - for (int x = cnt.length - 1; x > 0; --x) { - if (x == cnt[x]) { - return x; + + int ans = -1; + + for (int x = 1; x < cnt.length; ++x) { + if (cnt[x] == x) { + ans = x; } } - return -1; + + return ans; } } + ``` #### C++ diff --git a/solution/1300-1399/1394.Find Lucky Integer in an Array/Solution.java b/solution/1300-1399/1394.Find Lucky Integer in an Array/Solution.java index e032656eb678a..a584401759741 100644 --- a/solution/1300-1399/1394.Find Lucky Integer in an Array/Solution.java +++ b/solution/1300-1399/1394.Find Lucky Integer in an Array/Solution.java @@ -1,14 +1,17 @@ class Solution { public int findLucky(int[] arr) { - int[] cnt = new int[501]; + int[] cnt = new int[510]; for (int x : arr) { - ++cnt[x]; + cnt[x]++; } - for (int x = cnt.length - 1; x > 0; --x) { - if (x == cnt[x]) { - return x; + + int ans = -1; + for (int x = 1; x < cnt.length; ++x) { + if (cnt[x] == x) { + ans = x; } } - return -1; + + return ans; } -} \ No newline at end of file +} diff --git a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README.md b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README.md index 14ff47eb20577..6198bbe2337c4 100644 --- a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README.md +++ b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README.md @@ -162,13 +162,78 @@ class Solution: #### Java ```java +class Solution { + public int maxFreeTime(int eventTime, int[] startTime, int[] endTime) { + int n = startTime.length; + int maxGapBefore = 0; + int maxFreeTime = 0; + int lastEnd = 0; + for (int i = 0; i < n; i++) { + int meetingTime = endTime[i] - startTime[i]; + int nextStart = (i == n - 1) ? eventTime : startTime[i + 1]; + int freeTime = nextStart - lastEnd; + if (meetingTime > maxGapBefore) { + freeTime -= meetingTime; + } + + maxFreeTime = Math.max(maxFreeTime, freeTime); + maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd); + lastEnd = endTime[i]; + } + int maxGapAfter = 0; + int lastStart = eventTime; + for (int i = n - 1; i >= 0; i--) { + int meetingTime = endTime[i] - startTime[i]; + int prevEnd = (i == 0) ? 0 : endTime[i - 1]; + int freeTime = lastStart - prevEnd; + if (meetingTime <= maxGapAfter) { + maxFreeTime = Math.max(maxFreeTime, freeTime); + } + maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]); + lastStart = startTime[i]; + } + return maxFreeTime; + } +} ``` #### C++ ```cpp - +class Solution { +public: + int maxFreeTime(int eventTime, vector& startTime, vector& endTime) { + int n = startTime.size(); + int max_gap_before = 0; + int last_end = 0; + int max_free_time = 0; + + for (int i = 0; i < n; ++i) { + int meeting_time = endTime[i] - startTime[i]; + int next_start = (i == n - 1) ? eventTime : startTime[i + 1]; + int free_time = next_start - last_end; + if (meeting_time > max_gap_before) free_time -= meeting_time; + max_free_time = max(max_free_time, free_time); + max_gap_before = max(max_gap_before, startTime[i] - last_end); + last_end = endTime[i]; + } + + int max_gap_after = 0; + int last_start = eventTime; + for (int i = n - 1; i >= 0; --i) { + int meeting_time = endTime[i] - startTime[i]; + int prev_end = (i == 0) ? 0 : endTime[i - 1]; + int free_time = last_start - prev_end; + if (meeting_time <= max_gap_after) + max_free_time = max(max_free_time, free_time); + max_gap_after = max(max_gap_after, last_start - endTime[i]); + last_start = startTime[i]; + } + + return max_free_time; + } +}; ``` #### Go @@ -177,6 +242,40 @@ class Solution: ``` +#### Javascript + +```javascript +var maxFreeTime = function (eventTime, startTime, endTime) { + let n = startTime.length; + let maxGapBefore = 0, + maxFreeTime = 0, + lastEnd = 0; + + for (let i = 0; i < n; i++) { + let duration = endTime[i] - startTime[i]; + let nextStart = i === n - 1 ? eventTime : startTime[i + 1]; + let freeTime = nextStart - lastEnd; + if (duration > maxGapBefore) freeTime -= duration; + maxFreeTime = Math.max(maxFreeTime, freeTime); + maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd); + lastEnd = endTime[i]; + } + + let maxGapAfter = 0, + lastStart = eventTime; + for (let i = n - 1; i >= 0; i--) { + let duration = endTime[i] - startTime[i]; + let prevEnd = i === 0 ? 0 : endTime[i - 1]; + let freeTime = lastStart - prevEnd; + if (duration <= maxGapAfter) maxFreeTime = Math.max(maxFreeTime, freeTime); + maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]); + lastStart = startTime[i]; + } + + return maxFreeTime; +}; +``` + diff --git a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README_EN.md b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README_EN.md index dd6380c9fb3c3..6dd2d0e1390fb 100644 --- a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README_EN.md +++ b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README_EN.md @@ -160,13 +160,77 @@ class Solution: #### Java ```java - +class Solution { + public int maxFreeTime(int eventTime, int[] startTime, int[] endTime) { + int n = startTime.length; + int maxGapBefore = 0; + int maxFreeTime = 0; + int lastEnd = 0; + for (int i = 0; i < n; i++) { + int meetingTime = endTime[i] - startTime[i]; + int nextStart = (i == n - 1) ? eventTime : startTime[i + 1]; + int freeTime = nextStart - lastEnd; + if (meetingTime > maxGapBefore) { + freeTime -= meetingTime; + } + + maxFreeTime = Math.max(maxFreeTime, freeTime); + maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd); + lastEnd = endTime[i]; + } + int maxGapAfter = 0; + int lastStart = eventTime; + for (int i = n - 1; i >= 0; i--) { + int meetingTime = endTime[i] - startTime[i]; + int prevEnd = (i == 0) ? 0 : endTime[i - 1]; + int freeTime = lastStart - prevEnd; + if (meetingTime <= maxGapAfter) { + maxFreeTime = Math.max(maxFreeTime, freeTime); + } + maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]); + lastStart = startTime[i]; + } + return maxFreeTime; + } +} ``` #### C++ ```cpp - +class Solution { +public: + int maxFreeTime(int eventTime, vector& startTime, vector& endTime) { + int n = startTime.size(); + int max_gap_before = 0; + int last_end = 0; + int max_free_time = 0; + + for (int i = 0; i < n; ++i) { + int meeting_time = endTime[i] - startTime[i]; + int next_start = (i == n - 1) ? eventTime : startTime[i + 1]; + int free_time = next_start - last_end; + if (meeting_time > max_gap_before) free_time -= meeting_time; + max_free_time = max(max_free_time, free_time); + max_gap_before = max(max_gap_before, startTime[i] - last_end); + last_end = endTime[i]; + } + + int max_gap_after = 0; + int last_start = eventTime; + for (int i = n - 1; i >= 0; --i) { + int meeting_time = endTime[i] - startTime[i]; + int prev_end = (i == 0) ? 0 : endTime[i - 1]; + int free_time = last_start - prev_end; + if (meeting_time <= max_gap_after) + max_free_time = max(max_free_time, free_time); + max_gap_after = max(max_gap_after, last_start - endTime[i]); + last_start = startTime[i]; + } + + return max_free_time; + } +}; ``` #### Go @@ -175,6 +239,40 @@ class Solution: ``` +#### Javascript + +```javascript +var maxFreeTime = function (eventTime, startTime, endTime) { + let n = startTime.length; + let maxGapBefore = 0, + maxFreeTime = 0, + lastEnd = 0; + + for (let i = 0; i < n; i++) { + let duration = endTime[i] - startTime[i]; + let nextStart = i === n - 1 ? eventTime : startTime[i + 1]; + let freeTime = nextStart - lastEnd; + if (duration > maxGapBefore) freeTime -= duration; + maxFreeTime = Math.max(maxFreeTime, freeTime); + maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd); + lastEnd = endTime[i]; + } + + let maxGapAfter = 0, + lastStart = eventTime; + for (let i = n - 1; i >= 0; i--) { + let duration = endTime[i] - startTime[i]; + let prevEnd = i === 0 ? 0 : endTime[i - 1]; + let freeTime = lastStart - prevEnd; + if (duration <= maxGapAfter) maxFreeTime = Math.max(maxFreeTime, freeTime); + maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]); + lastStart = startTime[i]; + } + + return maxFreeTime; +}; +``` + diff --git a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.cpp b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.cpp new file mode 100644 index 0000000000000..e62e40369e3ab --- /dev/null +++ b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.cpp @@ -0,0 +1,33 @@ +class Solution { +public: + int maxFreeTime(int eventTime, vector& startTime, vector& endTime) { + int n = startTime.size(); + int max_gap_before = 0; + int last_end = 0; + int max_free_time = 0; + + for (int i = 0; i < n; ++i) { + int meeting_time = endTime[i] - startTime[i]; + int next_start = (i == n - 1) ? eventTime : startTime[i + 1]; + int free_time = next_start - last_end; + if (meeting_time > max_gap_before) free_time -= meeting_time; + max_free_time = max(max_free_time, free_time); + max_gap_before = max(max_gap_before, startTime[i] - last_end); + last_end = endTime[i]; + } + + int max_gap_after = 0; + int last_start = eventTime; + for (int i = n - 1; i >= 0; --i) { + int meeting_time = endTime[i] - startTime[i]; + int prev_end = (i == 0) ? 0 : endTime[i - 1]; + int free_time = last_start - prev_end; + if (meeting_time <= max_gap_after) + max_free_time = max(max_free_time, free_time); + max_gap_after = max(max_gap_after, last_start - endTime[i]); + last_start = startTime[i]; + } + + return max_free_time; + } +}; \ No newline at end of file diff --git a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.java b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.java new file mode 100644 index 0000000000000..484436e93451b --- /dev/null +++ b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.java @@ -0,0 +1,33 @@ +class Solution { + public int maxFreeTime(int eventTime, int[] startTime, int[] endTime) { + int n = startTime.length; + int maxGapBefore = 0; + int maxFreeTime = 0; + int lastEnd = 0; + for (int i = 0; i < n; i++) { + int meetingTime = endTime[i] - startTime[i]; + int nextStart = (i == n - 1) ? eventTime : startTime[i + 1]; + int freeTime = nextStart - lastEnd; + if (meetingTime > maxGapBefore) { + freeTime -= meetingTime; + } + + maxFreeTime = Math.max(maxFreeTime, freeTime); + maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd); + lastEnd = endTime[i]; + } + int maxGapAfter = 0; + int lastStart = eventTime; + for (int i = n - 1; i >= 0; i--) { + int meetingTime = endTime[i] - startTime[i]; + int prevEnd = (i == 0) ? 0 : endTime[i - 1]; + int freeTime = lastStart - prevEnd; + if (meetingTime <= maxGapAfter) { + maxFreeTime = Math.max(maxFreeTime, freeTime); + } + maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]); + lastStart = startTime[i]; + } + return maxFreeTime; + } +} \ No newline at end of file diff --git a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.js b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.js new file mode 100644 index 0000000000000..9e0b615791350 --- /dev/null +++ b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.js @@ -0,0 +1,29 @@ +var maxFreeTime = function (eventTime, startTime, endTime) { + let n = startTime.length; + let maxGapBefore = 0, + maxFreeTime = 0, + lastEnd = 0; + + for (let i = 0; i < n; i++) { + let duration = endTime[i] - startTime[i]; + let nextStart = i === n - 1 ? eventTime : startTime[i + 1]; + let freeTime = nextStart - lastEnd; + if (duration > maxGapBefore) freeTime -= duration; + maxFreeTime = Math.max(maxFreeTime, freeTime); + maxGapBefore = Math.max(maxGapBefore, startTime[i] - lastEnd); + lastEnd = endTime[i]; + } + + let maxGapAfter = 0, + lastStart = eventTime; + for (let i = n - 1; i >= 0; i--) { + let duration = endTime[i] - startTime[i]; + let prevEnd = i === 0 ? 0 : endTime[i - 1]; + let freeTime = lastStart - prevEnd; + if (duration <= maxGapAfter) maxFreeTime = Math.max(maxFreeTime, freeTime); + maxGapAfter = Math.max(maxGapAfter, lastStart - endTime[i]); + lastStart = startTime[i]; + } + + return maxFreeTime; +};