147.栈与队列:滑动窗口最大值(力扣)

2024-05-28 06:12

本文主要是介绍147.栈与队列:滑动窗口最大值(力扣),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码解决

class Solution {
private:class MyQueue{public:deque<int> que;// 删除队列中的元素,如果该元素等于队列的front// 这是为了保持队列中元素的正确性void pop(int val){if(!que.empty() && val == que.front()){que.pop_front();}}// 添加元素到队列,同时维护队列中的元素是降序的// 通过移除所有小于当前值的元素,保证队列中的最大值在front位置void push(int val){while(!que.empty() && val > que.back()){que.pop_back();}que.push_back(val);}// 获取队列的最大值(即队列的front)int front(){return que.front();}};public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {MyQueue que;vector<int> result;// 初始化前k个元素到队列for(int i = 0; i < k; i++){que.push(nums[i]);}// 记录第一个窗口的最大值result.push_back(que.front());// 滑动窗口遍历后面的元素for(int i = k; i < nums.size(); i++){// 移除窗口最左侧的元素que.pop(nums[i - k]);// 添加窗口最右侧的元素que.push(nums[i]);// 记录当前窗口的最大值result.push_back(que.front());}return result;}
};
  1. deque<int> que:

    • 使用双端队列来维护一个单调队列,队列中的元素是降序排列的。
  2. void pop(int val):

    • 如果队列不为空且要移除的值等于队列的前端值,则从队列中弹出该值。这一步是为了确保窗口的正确性。
  3. void push(int val):

    • 将新值 val 推入队列前,移除队列中所有小于 val 的元素。这保证了队列的降序性,因此队列的前端始终是最大值。
  4. int front():

    • 返回队列的前端值,这就是当前窗口的最大值。
maxSlidingWindow 方法
  1. MyQueue que:

    • 创建一个 MyQueue 实例来管理滑动窗口内的元素。
  2. vector<int> result:

    • 存储每个滑动窗口的最大值。
  3. 初始化前k个元素到队列:

    • 将前 k 个元素推入 MyQueue 中。
  4. result.push_back(que.front()):

    • 记录第一个滑动窗口的最大值。
  5. 滑动窗口遍历后面的元素:

    • 从第 k 个元素开始遍历到数组末尾:
      • 移除窗口最左侧的元素。
      • 添加窗口最右侧的元素。
      • 记录当前窗口的最大值。

这篇关于147.栈与队列:滑动窗口最大值(力扣)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1009754

相关文章

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

golang实现延迟队列(delay queue)的两种实现

《golang实现延迟队列(delayqueue)的两种实现》本文主要介绍了golang实现延迟队列(delayqueue)的两种实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录1 延迟队列:邮件提醒、订单自动取消2 实现2.1 simplChina编程e简单版:go自带的time

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

SpringKafka错误处理(重试机制与死信队列)

《SpringKafka错误处理(重试机制与死信队列)》SpringKafka提供了全面的错误处理机制,通过灵活的重试策略和死信队列处理,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数