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;
    }
};
相关推荐
橘子汽水16811 小时前
Leetcode 23,543合并K个升序链表,二叉树的直径
算法·leetcode·链表
huameinan狮子11 小时前
Adaboost算法原理与计算实例
算法
Tri_Function11 小时前
动态规划DP1(c++)
c++
别怪我很水11 小时前
API中提供了VelocityTracker类用于计算触摸事件MotionEvent的速度,而其内部默认使用的方法就是最小二乘法,本 ...
算法·gitee·最小二乘法
清水迎朝阳14 小时前
客户端软件 — 用户统计方案
服务器·c++·客户端·用户统计
Re.不晚14 小时前
挑战做100道力扣算法- DAY1
算法·leetcode·职场和发展
蓝悦无人机15 小时前
《Planning algorithms》读书笔记——第1章 引言
算法·读书笔记·规划算法·lavalle
Sagittarius_A*15 小时前
分组密码基础(二):Feistel 结构与 DES 的设计思想
算法·信息安全·密码学·des·数论
青山木15 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode