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