- [Leetcode 2958. Length of Longest Subarray With at Most K Frequency](#Leetcode 2958. Length of Longest Subarray With at Most K Frequency)
- [1. 解题思路](#1. 解题思路)
- [2. 代码实现](#2. 代码实现)
1. 解题思路
这一题思路上其实也很简单,就是一个滑动窗口的思路,遍历窗口的左边界,平移获得使得其内部字符的frequency不超过k的最大右边界,然后取各个窗口长度的最大值即可。
显然左右边界都是单调的,因此整体算法复杂度就是 O ( N ) O(N) O(N)。
2. 代码实现
给出python代码实现如下:
python
class Solution:
def maxSubarrayLength(self, nums: List[int], k: int) -> int:
i, j, n = 0, 0, len(nums)
cnt = defaultdict(int)
ans = 0
while j < n:
x = nums[j]
cnt[x] += 1
j += 1
while cnt[x] > k:
cnt[nums[i]] -= 1
i += 1
ans = max(ans, j-i)
return ans
提交代码评测得到:耗时1272ms,占用内存31.2MB。