LeetCode 1838 最高频元素的频数[滑动窗口] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1838 最高频元素的频数[滑动窗口] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

在这里插入图片描述解题思路:
一道看似麻烦但是缕清思路就可以很好解决的一道题目,使用的方法是滑动窗口。其实乍一看很难想到用这种方法,首先是对所有的元素进行一次排列,接着统计滑动窗口内的和,并且标记最大的数(j的位置),如果滑动窗口范围内的值加上所能调整的次数还是无法满足全部相等(等于最大的数),窗口左指针右移,代码如下:

class Solution {
public:
    int maxFrequency(vector<int>& nums, int k) {
        // 排序
        sort(nums.begin(), nums.end());
        // 定义左右指针
        int i = 0, j = 0, n = nums.size();
        // 统计数值
        long long sum = 0;
        while(j < n) {
            sum += nums[j ++];
            // 如果滑动窗口范围内的值加上所能调整的次数还是无法满足全部相等
            if((long long)nums[j - 1] * (j - i) > sum + k) {
                sum -= nums[i ++];
            }
        }
        return j - i;
    }
};

以上是关于LeetCode 1838 最高频元素的频数[滑动窗口] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1838. 最高频元素的频数 /76. 最小覆盖子串/727. 最小窗口子序列(动规,难)

1838. 最高频元素的频数

1838. 最高频元素的频数

Leetcode——最高频元素的频数

《LeetCode之每日一题》:95.最高频元素的频数

LeetCode 每日一题「最高频元素的频数」