LeetCode 1838 最高频元素的频数

LeetCode 1838 最高频元素的频数

🟡 中等

https://leetcode.cn/problems/frequency-of-the-most-frequent-element/description/

不排序没法做,要把相近的元素放到一块。

问题就是图中的三角区域能否被 k 填满, 找到底下最宽的宽就行;当右边右移后,左边的界限只会右移,不会左移。

另外, long rec = static_cast<long>(nums[i]) * (i - left + 1); 类型转换转如果只转最后的结果是不对的,要转操作数,转一个就行。

class Solution {

public:

    int maxFrequency(vector<int>& nums, int k) {

        sort(nums.begin(), nums.end());

        int left = 0;

        long sum = 0;

  

        long res = 0;

        for (int i = 0; i < nums.size(); i++) {

            sum += nums[i];

            long rec = static_cast<long>(nums[i]) * (i - left + 1);

  

            while (rec - sum > k) {

                rec -= nums[i];

                sum -= nums[left];

  

                left++;

            }

  

            if(rec-sum<=k){

                res = max(res,static_cast<long>(i-left+1) );

            }

        }

        return res;

    }

};