最高频元素的频数
题目描述
元素的 频数 是该元素在一个数组中出现的次数
给你一个整数数组 nums 和一个整数 k 。在一步操作中,你可以选择 nums 的一个下标,并将该下标对应元素的值增加1。
执行最多 k 次操作后,返回数组中最高频元素的 最大可能频数
解题思路
先排序,排序后,对于每个滑动窗口的右端点j,我们要找尽可能靠左的i,使得k足够把之间所有的数都加到nums[j]。换句话说,nums[j] * (j - i + 1) <= k + nums[i] + nums[i+1] + … + nums[j-1] + nums[j],对于每个j我们要找满足这个最小的那个i,j-i+1的最大值就是我们要求的最大区间,即为最高频元素的频数
解题代码
class Solution {
public:
int maxFrequency(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
long long Max=0,sum=0;
for(int i=0,j=0;j<nums.size();j++)
{
sum+=nums[j];
while((long long)nums[j]*(j-i+1)-sum>k)
{
sum-=nums[i];
i++;
}
Max=Max>(j-i+1)?Max:(j-i+1);
}
return Max;
}
};