Length of Longest Subarray With at Most K Frequency
MediumArrayHash TableSliding Window
Solution
export function maxSubarrayLength(nums: number[], k: number): number {
const counter = new Counter();
let answer = 0;
let start = 0;
nums.forEach((num, end) => {
counter.add(num);
while (k < counter.get(num)) {
counter.sub(nums[start]);
start += 1;
}
answer = Math.max(answer, end - start + 1);
});
return answer;
}
class Counter {
private readonly map: Map<number, number>;
constructor() {
this.map = new Map();
}
get(key: number): number {
return this.map.get(key) ?? 0;
}
add(key: number) {
return this.map.set(key, this.get(key) + 1);
}
sub(key: number) {
return this.map.set(key, this.get(key) - 1);
}
}