diff --git a/src/main/java/com/cool/ling_cha_mount/sliding_windows/Num2831.java b/src/main/java/com/cool/ling_cha_mount/sliding_windows/Num2831.java index 7846897..5c0af69 100644 --- a/src/main/java/com/cool/ling_cha_mount/sliding_windows/Num2831.java +++ b/src/main/java/com/cool/ling_cha_mount/sliding_windows/Num2831.java @@ -48,6 +48,36 @@ public class Num2831 { return res; } + /** + * @Author Cool + * @Date 19:19 2024/10/28 + * 灵神解法 + **/ + public int longestEqualSubarray1(List nums, int k) { + int n = nums.size(); + List[] posLists = new ArrayList[n + 1]; + Arrays.setAll(posLists, i -> new ArrayList<>()); + for (int i = 0; i < n; i++) { + int x = nums.get(i); + posLists[x].add(i - posLists[x].size()); + } + + int ans = 0; + for (List pos : posLists) { + if (pos.size() <= ans) { + continue; // 无法让 ans 变得更大 + } + int left = 0; + for (int right = 0; right < pos.size(); right++) { + while (pos.get(right) - pos.get(left) > k) { // 要删除的数太多了 + left++; + } + ans = Math.max(ans, right - left + 1); + } + } + return ans; + } + @Test public void test() { List objects = new ArrayList<>();