首页 > 其他 > 详细

5739 周赛 最高频元素的频数 滑动窗口双指针

时间:2021-04-25 18:50:53      阅读:16      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

排好序后用滑动窗口的思想。左标记从0开始,直到右标记无法再前进,此时让左标记前进,不断地调整框的大小,也在此过程中记录下框的大小

排序好一方面更容易获取最大值,而且也考虑了所有的可能。

class Solution {
public:
    int maxFrequency(vector<int>& nums, int k) {
        long long window=0; //因为11行的操作  测试用例 会出现9999*9999
        int l=0;//框的左标记
        int j=1;//右标记
        int max_res=1;//结果值
        sort(nums.begin(),nums.end());
        while(j<nums.size())
        {
            window+=(long long)(nums[j]-nums[j-1])*(j-l);//可以理解为window使得现有的滑动框内的值均为nums[j-1],现在来了nums[j],那相当于每个都加一个nums[j]-nums[j-1]
            while(window>k)
            {
                window-=nums[j]-nums[l];
                l++;//左标记右移
            }
            max_res=max(max_res,j-l+1);
            j++;
        }
        return max_res;
    }
};

 

5739 周赛 最高频元素的频数 滑动窗口双指针

原文:https://www.cnblogs.com/libin123/p/14700260.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!