LeetCode 3471: Find the Largest Almost Missing Integer (Frequency in Length-k Windows)
LeetCode 3471ArrayHash MapSource: https://leetcode.com/problems/find-the-largest-almost-missing-integer/
English
Count how many length-k windows contain each value, then pick the largest value whose count is exactly 1.
import java.util.*;
class Solution {
public int largestInteger(int[] nums, int k) {
Map<Integer, Integer> cnt = new HashMap<>();
int n = nums.length;
for (int i = 0; i + k <= n; i++) {
Set<Integer> seen = new HashSet<>();
for (int j = i; j < i + k; j++) seen.add(nums[j]);
for (int v : seen) cnt.put(v, cnt.getOrDefault(v, 0) + 1);
}
int ans = -1;
for (var e : cnt.entrySet()) if (e.getValue() == 1) ans = Math.max(ans, e.getKey());
return ans;
}
}func largestInteger(nums []int, k int) int {
cnt := map[int]int{}
n := len(nums)
for i := 0; i+k <= n; i++ {
seen := map[int]bool{}
for j := i; j < i+k; j++ { seen[nums[j]] = true }
for v := range seen { cnt[v]++ }
}
ans := -1
for v, c := range cnt { if c == 1 && v > ans { ans = v } }
return ans
}int largestInteger(vector<int>& nums, int k) {
unordered_map<int,int> cnt;
int n = nums.size();
for (int i = 0; i + k <= n; i++) {
unordered_set<int> seen;
for (int j = i; j < i + k; j++) seen.insert(nums[j]);
for (int v : seen) cnt[v]++;
}
int ans = -1;
for (auto &[v, c] : cnt) if (c == 1) ans = max(ans, v);
return ans;
}def largestInteger(nums: list[int], k: int) -> int:
from collections import defaultdict
cnt = defaultdict(int)
n = len(nums)
for i in range(n - k + 1):
seen = set(nums[i:i+k])
for v in seen:
cnt[v] += 1
ans = -1
for v, c in cnt.items():
if c == 1:
ans = max(ans, v)
return ansfunction largestInteger(nums, k) {
const cnt = new Map();
for (let i = 0; i + k <= nums.length; i++) {
const seen = new Set();
for (let j = i; j < i + k; j++) seen.add(nums[j]);
for (const v of seen) cnt.set(v, (cnt.get(v) || 0) + 1);
}
let ans = -1;
for (const [v, c] of cnt) if (c === 1) ans = Math.max(ans, v);
return ans;
}中文
统计每个数字出现在多少个长度为 k 的子数组中,最后取“恰好出现于 1 个窗口”的最大值。
import java.util.*;
class Solution {
public int largestInteger(int[] nums, int k) {
Map<Integer, Integer> cnt = new HashMap<>();
int n = nums.length;
for (int i = 0; i + k <= n; i++) {
Set<Integer> seen = new HashSet<>();
for (int j = i; j < i + k; j++) seen.add(nums[j]);
for (int v : seen) cnt.put(v, cnt.getOrDefault(v, 0) + 1);
}
int ans = -1;
for (var e : cnt.entrySet()) if (e.getValue() == 1) ans = Math.max(ans, e.getKey());
return ans;
}
}func largestInteger(nums []int, k int) int {
cnt := map[int]int{}
n := len(nums)
for i := 0; i+k <= n; i++ {
seen := map[int]bool{}
for j := i; j < i+k; j++ { seen[nums[j]] = true }
for v := range seen { cnt[v]++ }
}
ans := -1
for v, c := range cnt { if c == 1 && v > ans { ans = v } }
return ans
}int largestInteger(vector<int>& nums, int k) {
unordered_map<int,int> cnt;
int n = nums.size();
for (int i = 0; i + k <= n; i++) {
unordered_set<int> seen;
for (int j = i; j < i + k; j++) seen.insert(nums[j]);
for (int v : seen) cnt[v]++;
}
int ans = -1;
for (auto &[v, c] : cnt) if (c == 1) ans = max(ans, v);
return ans;
}def largestInteger(nums: list[int], k: int) -> int:
from collections import defaultdict
cnt = defaultdict(int)
n = len(nums)
for i in range(n - k + 1):
seen = set(nums[i:i+k])
for v in seen:
cnt[v] += 1
ans = -1
for v, c in cnt.items():
if c == 1:
ans = max(ans, v)
return ansfunction largestInteger(nums, k) {
const cnt = new Map();
for (let i = 0; i + k <= nums.length; i++) {
const seen = new Set();
for (let j = i; j < i + k; j++) seen.add(nums[j]);
for (const v of seen) cnt.set(v, (cnt.get(v) || 0) + 1);
}
let ans = -1;
for (const [v, c] of cnt) if (c === 1) ans = Math.max(ans, v);
return ans;
}
Comments