LeetCode 2958.最多K个重复元素的最长子数组
题目:
给你一个整数数组 nums
和一个整数 k
。
一个元素 x
在数组中的 频率 指的是它在数组中的出现次数。
如果一个数组中所有元素的频率都 小于等于 k
,那么我们称这个数组是 好 数组。
请你返回 nums
中 最长好 子数组的长度。
子数组 指的是一个数组中一段连续非空的元素序列。
思路:不定长滑动窗口 求最长
代码:
class Solution {public int maxSubarrayLength(int[] nums, int k) {int n = nums.length;int left = 0;int ans = 0;Map<Integer, Integer> map = new HashMap<>();for (int right = 0; right < n; right++) {map.merge(nums[right], 1, Integer::sum);while (map.get(nums[right]) > k) {int out = nums[left];map.merge(out, -1, Integer::sum);left++;}ans = Math.max(ans, right -left + 1);}return ans;}
}
性能: