From c86f4791ce535eea2195486775d611e83cc219c7 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Sun, 23 Feb 2025 16:26:02 +0200 Subject: [PATCH 1/3] Improved task 2747 --- .../Solution.java | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java b/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java index 97e8f178d..4ed387ec5 100644 --- a/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java +++ b/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java @@ -1,39 +1,39 @@ package g2701_2800.s2747_count_zero_request_servers; // #Medium #Array #Hash_Table #Sorting #Sliding_Window -// #2023_09_24_Time_43_ms_(76.92%)_Space_85.7_MB_(63.85%) +// #2025_02_23_Time_23_ms_(97.67%)_Space_87.33_MB_(63.95%) import java.util.Arrays; -import java.util.Comparator; -import java.util.HashMap; public class Solution { - public int[] countServers(int n, int[][] logs, int x, int[] qs) { - int m = qs.length; - var valIdx = new int[m][2]; + public int[] countServers(int n, int[][] logs, int x, int[] queries) { + Arrays.sort(logs, (a, b) -> a[1] - b[1]); + int m = queries.length; + int len = logs.length; + int[][] qarr = new int[m][]; for (int i = 0; i < m; i++) { - valIdx[i] = new int[] {qs[i], i}; + qarr[i] = new int[] {i, queries[i]}; } - Arrays.sort(valIdx, Comparator.comparingInt(a -> a[0])); - Arrays.sort(logs, Comparator.comparingInt(a -> a[1])); - int l = 0; - int r = 0; - var res = new int[m]; - var servCount = new HashMap(); - for (var q : valIdx) { - int rVal = q[0]; - int lVal = q[0] - x; - int i = q[1]; - while (r < logs.length && logs[r][1] <= rVal) { - servCount.merge(logs[r++][0], 1, Integer::sum); + Arrays.sort(qarr, (a, b) -> a[1] - b[1]); + int[] ans = new int[m]; + int[] freq = new int[n + 1]; + int l = 0, r = 0, noReq = n; + for (int[] q : qarr) { + int i = q[0], t = q[1]; + while (r < len && logs[r][1] <= t) { + if (freq[logs[r][0]]++ == 0) { + noReq--; + } + r++; } - while (l < r && logs[l][1] < lVal) { - servCount.compute(logs[l][0], (k, v) -> v - 1); - servCount.remove(logs[l][0], 0); + while (l < len && logs[l][1] < t - x) { + if (freq[logs[l][0]]-- == 1) { + noReq++; + } l++; } - res[i] = n - servCount.size(); + ans[i] = noReq; } - return res; + return ans; } } From 5dc472e1606742c7beb94d932bac1e6efc215fad Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Sun, 23 Feb 2025 16:27:55 +0200 Subject: [PATCH 2/3] Improved tags --- .../g2701_2800/s2747_count_zero_request_servers/Solution.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java b/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java index 4ed387ec5..8140a804b 100644 --- a/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java +++ b/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java @@ -1,7 +1,7 @@ package g2701_2800.s2747_count_zero_request_servers; // #Medium #Array #Hash_Table #Sorting #Sliding_Window -// #2025_02_23_Time_23_ms_(97.67%)_Space_87.33_MB_(63.95%) +// #2025_02_23_Time_22_ms_(100.00%)_Space_87.21_MB_(63.95%) import java.util.Arrays; From a5a8a471aa2cda6719525cb6b236800150c850bc Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Sun, 23 Feb 2025 16:29:33 +0200 Subject: [PATCH 3/3] Fixed style --- .../s2747_count_zero_request_servers/Solution.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java b/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java index 8140a804b..0c6c8260f 100644 --- a/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java +++ b/src/main/java/g2701_2800/s2747_count_zero_request_servers/Solution.java @@ -17,9 +17,12 @@ public int[] countServers(int n, int[][] logs, int x, int[] queries) { Arrays.sort(qarr, (a, b) -> a[1] - b[1]); int[] ans = new int[m]; int[] freq = new int[n + 1]; - int l = 0, r = 0, noReq = n; + int l = 0; + int r = 0; + int noReq = n; for (int[] q : qarr) { - int i = q[0], t = q[1]; + int i = q[0]; + int t = q[1]; while (r < len && logs[r][1] <= t) { if (freq[logs[r][0]]++ == 0) { noReq--;