From 9e38ed46c28dca085163b999f81a9574e2027190 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Wed, 16 Sep 2026 21:47:52 +0300 Subject: [PATCH 1/4] Added tasks 3920, 3921 --- .../Solution.java | 44 +++++++++++ .../readme.md | 52 +++++++++++++ .../s3921_score_validator/Solution.java | 26 +++++++ .../s3921_score_validator/readme.md | 73 +++++++++++++++++++ .../SolutionTest.java | 23 ++++++ .../s3921_score_validator/SolutionTest.java | 33 +++++++++ 6 files changed, 251 insertions(+) create mode 100644 src/main/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/Solution.java create mode 100644 src/main/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/readme.md create mode 100644 src/main/java/g3901_4000/s3921_score_validator/Solution.java create mode 100644 src/main/java/g3901_4000/s3921_score_validator/readme.md create mode 100644 src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java create mode 100644 src/test/java/g3901_4000/s3921_score_validator/SolutionTest.java diff --git a/src/main/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/Solution.java b/src/main/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/Solution.java new file mode 100644 index 000000000..69e21e4be --- /dev/null +++ b/src/main/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/Solution.java @@ -0,0 +1,44 @@ +package g3901_4000.s3920_maximize_fixed_points_after_deletions; + +// #Hard #Array #Sorting #Binary_Search #Senior_Staff #Weekly_Contest_500 +// #2026_09_16_Time_19_ms_(100.00%)_Space_124.05_MB_(97.30%) + +import java.util.Arrays; + +public class Solution { + public int maxFixedPoints(int[] nums) { + int n = nums.length; + long[] arr = new long[n]; + int index = 0; + for (int i = 0; i < n; i++) { + if (nums[i] <= i) { + arr[index++] = (long) i - nums[i] << 32 | nums[i]; + } + } + if (index == 0) { + return 0; + } + Arrays.sort(arr, 0, index); + int max = 0; + int[] lis = new int[index]; + lis[0] = (int) arr[0]; + for (int i = 1; i < index; i++) { + int val = (int) arr[i]; + lis[val > lis[max] ? ++max : binarySearch(lis, val, max)] = val; + } + return max + 1; + } + + private int binarySearch(int[] arr, int target, int right) { + int left = 0; + while (left < right) { + int mid = left + right >>> 1; + if (arr[mid] >= target) { + right = mid; + } else { + left = mid + 1; + } + } + return left; + } +} diff --git a/src/main/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/readme.md b/src/main/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/readme.md new file mode 100644 index 000000000..742c9ed66 --- /dev/null +++ b/src/main/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/readme.md @@ -0,0 +1,52 @@ +3920\. Maximize Fixed Points After Deletions + +Hard + +You are given an integer array `nums`. + +A position `i` is called a **fixed point** if `nums[i] == i`. + +You are allowed to delete **any** number of elements (including zero) from the array. After each deletion, the remaining elements **shift left**, and indices are reassigned starting from 0. + +Return an integer denoting the **maximum** number of fixed points that can be achieved after performing any number of deletions. + +**Example 1:** + +**Input:** nums = [0,2,1] + +**Output:** 2 + +**Explanation:** + +* Delete `nums[1] = 2`. The array becomes `[0, 1]`. +* Now, `nums[0] = 0` and `nums[1] = 1`, so both indices are fixed points. +* Thus, the answer is 2. + +**Example 2:** + +**Input:** nums = [3,1,2] + +**Output:** 2 + +**Explanation:** + +* Do not delete any elements. The array remains `[3, 1, 2]`. +* Here, `nums[1] = 1` and `nums[2] = 2`, so these indices are fixed points. +* Thus, the answer is 2. + +**Example 3:** + +**Input:** nums = [1,0,1,2] + +**Output:** 3 + +**Explanation:** + +* Delete `nums[0] = 1`. The array becomes `[0, 1, 2]`. +* Now, `nums[0] = 0`, `nums[1] = 1`, and `nums[2] = 2`, so all indices are fixed points. +* Thus, the answer is 3. + +**Constraints:** + +* 1 <= nums.length <= 105 +* 0 <= nums[i] <= 105 \ No newline at end of file diff --git a/src/main/java/g3901_4000/s3921_score_validator/Solution.java b/src/main/java/g3901_4000/s3921_score_validator/Solution.java new file mode 100644 index 000000000..01df6e4fa --- /dev/null +++ b/src/main/java/g3901_4000/s3921_score_validator/Solution.java @@ -0,0 +1,26 @@ +package g3901_4000.s3921_score_validator; + +// #Easy #Array #String #Simulation #Mid_Level #Biweekly_Contest_182 +// #2026_09_16_Time_2_ms_(91.74%)_Space_47.44_MB_(30.84%) + +public class Solution { + public int[] scoreValidator(String[] events) { + int counter = 0; + int score = 0; + for (String i : events) { + if (counter == 10) { + break; + } + if (i.equals("WD")) { + score += 1; + } else if (i.equals("NB")) { + score += 1; + } else if (i.equals("W")) { + counter += 1; + } else { + score += Integer.parseInt(i); + } + } + return new int[] {score, counter}; + } +} diff --git a/src/main/java/g3901_4000/s3921_score_validator/readme.md b/src/main/java/g3901_4000/s3921_score_validator/readme.md new file mode 100644 index 000000000..00ee3d9d2 --- /dev/null +++ b/src/main/java/g3901_4000/s3921_score_validator/readme.md @@ -0,0 +1,73 @@ +3921\. Score Validator + +Easy + +You are given a string array `events`. + +Initially, `score = 0` and `counter = 0`. Each element in `events` is one of the following: + +* `"0"`, `"1"`, `"2"`, `"3"`, `"4"`, `"6"`: Add that value to the total score. +* `"W"`: Increase the counter by 1. No score is added. +* `"WD"`: Add 1 to the total score. +* `"NB"`: Add 1 to the total score. + +Process the array from left to right. Stop processing when either: + +* All elements in `events` have been processed, or +* The counter becomes 10. + +Return an integer array `[score, counter]`, where: + +* `score` is the final total score. +* `counter` is the final counter value. + +**Example 1:** + +**Input:** events = ["1","4","W","6","WD"] + +**Output:** [12,1] + +**Explanation:** + +| Event | Score | Counter | +|---|---:|---:| +| `"1"` | 1 | 0 | +| `"4"` | 5 | 0 | +| `"W"` | 5 | 1 | +| `"6"` | 11 | 1 | +| `"WD"` | 12 | 1 | + +Final result: `[12, 1]`. + +**Example 2:** + +**Input:** events = ["WD","NB","0","4","4"] + +**Output:** [10,0] + +**Explanation:** + +| Event | Score | Counter | +|---|---:|---:| +| `"WD"` | 1 | 0 | +| `"NB"` | 2 | 0 | +| `"0"` | 2 | 0 | +| `"4"` | 6 | 0 | +| `"4"` | 10 | 0 | + +Final result: `[10, 0]`. + +**Example 3:** + +**Input:** events = ["W","W","W","W","W","W","W","W","W","W","W"] + +**Output:** [0,10] + +**Explanation:** + +After 10 occurrences of `"W"`, the counter reaches 10, so processing stops. The remaining events are ignored. + +**Constraints:** + +* `1 <= events.length <= 1000` +* `events[i]` is one of `"0"`, `"1"`, `"2"`, `"3"`, `"4"`, `"6"`, `"W"`, `"WD"`, or `"NB"`. \ No newline at end of file diff --git a/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java b/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java new file mode 100644 index 000000000..9700877f2 --- /dev/null +++ b/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java @@ -0,0 +1,23 @@ +package g3901_4000.s3920_maximize_fixed_points_after_deletions; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.jupiter.api.Test; + +class SolutionTest { + @Test + void maxFixedPoints() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 1, 2}), equalTo(2)); + } + + @Test + void maxFixedPoints2() { + assertThat(new Solution().maxFixedPoints(new int[] {3, 1, 2}), equalTo(2)); + } + + @Test + void maxFixedPoints3() { + assertThat(new Solution().maxFixedPoints(new int[] {1, 0, 1, 2}), equalTo(3)); + } +} diff --git a/src/test/java/g3901_4000/s3921_score_validator/SolutionTest.java b/src/test/java/g3901_4000/s3921_score_validator/SolutionTest.java new file mode 100644 index 000000000..bf3f2f187 --- /dev/null +++ b/src/test/java/g3901_4000/s3921_score_validator/SolutionTest.java @@ -0,0 +1,33 @@ +package g3901_4000.s3921_score_validator; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.jupiter.api.Test; + +class SolutionTest { + @Test + void scoreValidator() { + assertThat( + new Solution().scoreValidator(new String[] {"1", "4", "W", "6", "WD"}), + equalTo(new int[] {12, 1})); + } + + @Test + void scoreValidator2() { + assertThat( + new Solution().scoreValidator(new String[] {"WD", "NB", "0", "4", "4"}), + equalTo(new int[] {10, 0})); + } + + @Test + void scoreValidator3() { + assertThat( + new Solution() + .scoreValidator( + new String[] { + "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W" + }), + equalTo(new int[] {0, 10})); + } +} From 0521922f0b1676a6bf93de07f0fc36dcb3a6697d Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Wed, 16 Sep 2026 21:54:53 +0300 Subject: [PATCH 2/4] Fixed test --- .../SolutionTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java b/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java index 9700877f2..399f955f6 100644 --- a/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java +++ b/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java @@ -8,7 +8,7 @@ class SolutionTest { @Test void maxFixedPoints() { - assertThat(new Solution().maxFixedPoints(new int[] {0, 1, 2}), equalTo(2)); + assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 1}), equalTo(2)); } @Test From c9c0ee38767125bc8c833320c30f67130938f510 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Thu, 17 Sep 2026 19:02:22 +0300 Subject: [PATCH 3/4] Added tests --- .../SolutionTest.java | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java b/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java index 399f955f6..22ae71d35 100644 --- a/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java +++ b/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java @@ -20,4 +20,89 @@ void maxFixedPoints2() { void maxFixedPoints3() { assertThat(new Solution().maxFixedPoints(new int[] {1, 0, 1, 2}), equalTo(3)); } + + @Test + void maxFixedPoints4() { + assertThat(new Solution().maxFixedPoints(new int[] {}), equalTo(0)); + } + + @Test + void maxFixedPoints5() { + assertThat(new Solution().maxFixedPoints(new int[] {1}), equalTo(0)); + } + + @Test + void maxFixedPoints6() { + assertThat(new Solution().maxFixedPoints(new int[] {0}), equalTo(1)); + } + + @Test + void maxFixedPoints7() { + assertThat(new Solution().maxFixedPoints(new int[] {5, 5, 5}), equalTo(0)); + } + + @Test + void maxFixedPoints8() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 0, 0, 0}), equalTo(1)); + } + + @Test + void maxFixedPoints9() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 1, 2, 3, 4}), equalTo(5)); + } + + @Test + void maxFixedPoints10() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 0, 1, 2, 3}), equalTo(4)); + } + + @Test + void maxFixedPoints11() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 2, 3}), equalTo(2)); + } + + @Test + void maxFixedPoints12() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 3, 1, 2}), equalTo(3)); + } + + @Test + void maxFixedPoints13() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 3, 2, 1}), equalTo(2)); + } + + @Test + void maxFixedPoints14() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 1, 0, 1, 2}), equalTo(3)); + } + + @Test + void maxFixedPoints15() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 1, 0, 3}), equalTo(3)); + } + + @Test + void maxFixedPoints16() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 4, 1, 2, 3}), equalTo(4)); + } + + @Test + void maxFixedPoints17() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 5, 4, 3, 2, 1}), equalTo(2)); + } + + @Test + void maxFixedPoints18() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 3, 1, 4}), equalTo(3)); + } + + @Test + void maxFixedPoints19() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 1, 3, 2, 4}), equalTo(4)); + } + + @Test + void maxFixedPoints20() { + assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 1, 4, 3, 5}), equalTo(4)); + } } From 22856d1bd8afd9de2e9440653a8fb539be53d765 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Thu, 17 Sep 2026 19:11:36 +0300 Subject: [PATCH 4/4] Fixed tests --- .../SolutionTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java b/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java index 22ae71d35..f44d46bb3 100644 --- a/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java +++ b/src/test/java/g3901_4000/s3920_maximize_fixed_points_after_deletions/SolutionTest.java @@ -58,7 +58,7 @@ void maxFixedPoints10() { @Test void maxFixedPoints11() { - assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 2, 3}), equalTo(2)); + assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 2, 3}), equalTo(3)); } @Test @@ -93,16 +93,16 @@ void maxFixedPoints17() { @Test void maxFixedPoints18() { - assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 3, 1, 4}), equalTo(3)); + assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 3, 1, 4}), equalTo(2)); } @Test void maxFixedPoints19() { - assertThat(new Solution().maxFixedPoints(new int[] {0, 1, 3, 2, 4}), equalTo(4)); + assertThat(new Solution().maxFixedPoints(new int[] {0, 1, 3, 2, 4}), equalTo(3)); } @Test void maxFixedPoints20() { - assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 1, 4, 3, 5}), equalTo(4)); + assertThat(new Solution().maxFixedPoints(new int[] {0, 2, 1, 4, 3, 5}), equalTo(3)); } }