leetcode1838. 最高频元素的频数

原题链接:https://leetcode-cn.com/problems/frequency-of-the-most-frequent-element/

题意:

元素的 频数 是该元素在一个数组中出现的次数。

给你一个整数数组 nums 和一个整数 k 。在一步操作中,你可以选择 nums 的一个下标,并将该下标对应元素的值增加 1 。

执行最多 k 次操作后,返回数组中最高频元素的 最大可能频数 。

方法:滑动窗口,先将数组从小到大排序,用k值填补滑动窗口中所有的空缺(滑动窗口中中每个数与滑动窗口最右侧的数的差值就是空缺) ,每次都比较与当前最大长度的大小,返回最大的长度,就是最大可能频数

class Solution {
public:
    int maxFrequency(vector& nums, int k) {
        sort(nums.begin(),nums.end());
        int maxn = 0;//滑动窗口最大长度
        int left=0,right=0,len=nums.size();//滑动窗口左侧坐标,滑动窗口右侧坐标,滑动窗口的长度
        long long sum = 0;//滑动窗口的大小。
        while(rightk)//滑动窗口面积减去各个元素的面积和用k来填补,k不够补,滑动窗口的左侧就进位
            {
                sum-=nums[left];//进位时更新各个元素的面积和
                tmp-=nums[right];//更新滑动窗口的总面积
                left++;//滑动窗口左侧坐标往右移动
            }
            maxn = max(maxn,right-left+1);//更新最大长度
            right++;//滑动窗口右侧坐标往右滑动
        }
        return maxn;//返回最大长度
    }
};

 

你可能感兴趣的:(c/c++,算法设计,leetcode)