滑动窗口
滑动窗口解题模板:
# 滑动窗口模板
left,right = 0, (0 or 1)
res= total = 0
while right < len(nums):
更新total值
while 窗口内数据不满足要求
1. 更新total值
2. 收缩左边界
更新res最大值
返回 res
例题:
leetcode 1838题,最高频元素的频数
元素的 频数 是该元素在一个数组中出现的次数。
给你一个整数数组 nums 和一个整数 k 。在一步操作中,你可以选择 nums 的一个下标,并将该下标对应元素的值增加 1 。
执行最多 k 次操作后,返回数组中最高频元素的 最大可能频数 。
class Solution {
public int maxFrequency(int[] nums, int k) {
Arrays.sort(nums);
int left=0,res=1;
long total =0;
for(int right =1;right<nums.length;right++){
total += (long)(nums[right]-nums[right-1])*(right-left);
while(total > k){
total -=nums[right]-nums[left];
left+=1;
}
res = Math.max(res,right-left+1);
}
return res;
}
}
之后持续更新