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;
    }
};
相关推荐
luoganttcc1 小时前
FP16 和 BF16 的数学表达
算法
玖釉-1 小时前
Vulkan 示例解析:pipelines.cpp 如何在一个 Render Pass 中切换多条 Graphics Pipeline
c++·windows·算法·图形渲染
ji198594431 小时前
局部线性嵌入(LLE)算法 MATLAB 实现
算法·机器学习·matlab
Deepoch1 小时前
Deepoc VLA开发板:无人机群体协同与无网络自主作业核心
网络·人工智能·算法·无人机·deepoc·具身模型开发板
随意起个昵称2 小时前
线性dp-计数类题目11(不等数列)
c++·算法·动态规划
并不喜欢吃鱼2 小时前
一.C++11:统一列表初始化 + std::initializer_list 超详细精讲
开发语言·c++
Black蜡笔小新2 小时前
自动化AI算法训练服务器DLTM零代码私有化部署筑牢企业AI落地根基
人工智能·算法·自动化
wWYy.2 小时前
算法:最大子数组和
算法
吃着火锅x唱着歌2 小时前
LeetCode 3829.设计共享出行系统
算法·leetcode·职场和发展