< Back 2958. Length of Longest Subarray With at Most K Frequency This is somewhat related to 3. Longest Substring Without Repeating Characters, however, we are now looking for the longest subarray with at most k frequency of any number. Just like our related problem, we maintain a hashmap to keep track of the numbers we've seen, but this time we take action to shrink the window when the frequency of a number is greater than k. Instead of the left pointer jumping to the last seen location of the number in question, we have to gradually shrink the array because the number in question has been seen multiple times. So to solve this, while the left pointer is less than the right pointer and the number in question is still larger than k, we decrement the frequency of the number pointed to by the left pointer and increment the left pointer. Eventually, the number in question will no longer have a frequency greater than k. The solution is as follows: from collections import defaultdict class Solution: def maxSubarrayLength(self, nums: List[int], k: int) -> int: count = defaultdict(int) ans = l = 0 for r, num in enumerate(nums): count[num] += 1 if count[num] > k: while l < r and count[num] > k: count[nums[l]] -= 1 l += 1 ans = max(ans, r - l + 1) return ans _ Time Complexity: O(n) - We have to iterate through the entire input array. _ Space Complexity: O(n) - We store the frequency of each number in the input array.