0%

leetCode 1838题

LeetCode 1838题

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

关键点:
1、最后的最频繁出现的元素一定在数组中,如果不在数组中,也可以通过整体少increase几次的方式,回到数组元素中。
2、最后的结果元素在最后加工前元素中,是最大的。
3、以上两点可以得到,将数组排序后,元素一定在数组的一个窗口内,不可能窗口内有元素被跳过。

综上所述,代码如下

class Solution {
public:
    int maxFrequency(vector<int>& nums, int k) {
        sort(nums.begin(),nums.end());
        int left = 0;
        int ans = 0;
        long sum = 0;
        for(int right = 0;right<nums.size();right++){
            sum += nums[right];
            if(long(right-left+1)*nums[right] - sum > k){
                sum-=nums[left];
                left++;
            }
            ans = (right-left+1>ans)?right-left+1:ans;
        }
        
        return ans;
    }
};