当前位置: 首页 > news >正文

学习+刷题:239. 滑动窗口最大值

题目描述:

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值 。

示例 1:

输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置                最大值
---------------               -----
[1  3  -1] -3  5  3  6  7       3
 1 [3  -1  -3] 5  3  6  7       3
 1  3 [-1  -3  5] 3  6  7       5
 1  3  -1 [-3  5  3] 6  7       5
 1  3  -1  -3 [5  3  6] 7       6
 1  3  -1  -3  5 [3  6  7]      7
示例 2:

输入:nums = [1], k = 1
输出:[1]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sliding-window-maximum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:代码随想录上给出了单调队列的解法。

中心思想就是利用双向队列deque 写一个新函数或者在类力定义它的push  和pop 

push的时候不要直接push,先看push的这个值value是否比队列(back处)的值大,如果是,就从back处弹出,pop_back(),直到value<=que.back()。这样可以保证que.front() 的值一直是最大的。

同样弹出的时候,也要考虑此时que.front() 的值是否等于滑动窗口最左侧的值,等于的话就弹出,不等于的话说明在push那一步的时候已经弹出过了,就不用进行操作。

class Solution {
     class MyQueue
 {
public:
deque<int>dq;
void pop(int value)
{
    if(!dq.empty() && value==dq.front())
    {
        dq.pop_front();
    }
}
void push(int value)
{
    while(!dq.empty() && value>dq.back())
    {
        dq.pop_back();
    }
    dq.push_back(value);
}
int ans()
{
    return dq.front();
}
 };

public:
vector<int>maxSlidingWindow(vector<int>& nums,int k)
{
    MyQueue que;
    vector<int>res;
    for(int i=0;i<k;i++)
    {
        que.push(nums[i]);
    }
    res.push_back(que.ans());
    for(int i=k;i<nums.size();i++)
    {
        que.pop(nums[i-k]);
        que.push(nums[i]);
        res.push_back(que.ans());
    }
    return res;

    }
};

相关文章:

  • 测试老鸟手把手教你python接口自动化测试项目实战演示
  • FB使用入口点函数例子
  • Vue 04 - Vue模板语法
  • 【算法题】2498. 青蛙过河 II
  • 【Java】自定义注解和AOP切面的使用
  • 论文心得笔记
  • 等保部作业
  • ASIC-WORLD Verilog(3)第一个Verilog代码
  • jquery基础之效果
  • 爬虫-day1-正则表达式作业
  • 【SSM】Spring6(一.IOC的实现)
  • vue开发常用的工具有哪些
  • 使用Selenium和Chrome浏览器获取诗词网站搜索结果
  • C++STL 标准模板库
  • chatGDP一下火爆全球,李开复宣布亲自筹组 Project AI 2.0,做中文版的chatGDP,Android程序员的前景还有多少可能?
  • Python for while 循环
  • 【Linux】理解Linux中硬链接和软链接
  • 【Java EE】-多线程编程(四) 死锁
  • 音段特征 VS 超音段特征
  • 基于Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的应用实践技术
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉