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;
    }
};
相关推荐
一去不复返的通信er3 小时前
力扣-图论-岛屿数量
算法·leetcode·图论
青瓦梦滋4 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
程序 代码狂人6 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
HDU-Dade7 小时前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
Xin7708 小时前
LeetCode 79. 单词搜索(DFS 回溯法)
leetcode
小郎君6589 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
算法
CodeYp20199 小时前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树
邵奈一9 小时前
GPT-6.1 Terra速度是Sol的3倍,价格减半
算法
RaaS1009 小时前
Node.js Brotli RCE 漏洞自查指南:fetch、undici、axios 都在影响面,三分钟确认你的版本
人工智能·深度学习·算法