leetcode239 滑动窗口最大值

一、问题描述

二、解题思路

利用滑动窗口+哈希map来解决这个问题,map来记录窗口中元素出现的次数,map的键是窗口中的数,值为该数字在窗口中出现的次数。由于map的底层实现是红黑树,所以hash.rbegin()->first就是当前窗口中最大的数,将其加入ret向量即可。

三、代码实现

cpp 复制代码
class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        //滑动窗口+哈希表<数组元素(int),出现的次数(int)>
        //特殊情况
        vector<int> ret;
        int n=nums.size();
        if(n<k) return ret;
        
        //正常情况
        map<int,int> hash;
        //窗口扩张
        int left=0,right=-1;
        for(int i=0;i!=k;i++)  hash[nums[++right]]++;
        int add=hash.rbegin()->first;
        ret.push_back(add);

        //窗口后移
        for(int i=k;i!=nums.size();i++){
            //添加最右侧的元素
            hash[nums[++right]]++;
            //剔除最左侧的元素
            hash[nums[left]]--;
            if(hash[nums[left]]==0) hash.erase(nums[left]);
            left++;
            //加入ret
            add=hash.rbegin()->first;
            ret.push_back(add);
        }
        return ret;
    }
};
相关推荐
傲世仙尊3 分钟前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++
cvby23 分钟前
C++11
开发语言·c++
Phil32328 分钟前
多智能体不是越多越好:Google《Towards a Science of Scaling Agent Systems》论文深度解读
算法
6Hzlia29 分钟前
【Classic 150 刷题计划】 LeetCode 26. 删除有序数组中的重复项 | C++ 快慢双指针经典模板
c++·算法·leetcode
huang5791471 小时前
基于滑动窗口的流式数据算法优化思路3
算法
Ulyanov1 小时前
AudioVision Pro:基于 PySide6 + sounddevice 的实时音频可视化播放器设计
python·算法·音视频
夜不会漫长1 小时前
C++:类和对象(2)
java·javascript·c++
土司大王1 小时前
LeetCode hot100——74.搜索二维矩阵:Java 二分模板
java·算法·leetcode
无小道2 小时前
C++ 中 `explicit` 关键字详解:彻底理解隐式类型转换
c++·explicit
蒸蒸yyyyzwd2 小时前
cpp 选手秋招学习笔记 day34
c++·八股