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

包含min函数的栈

需要O(1)时间求出最小值。如果换成最大值,那就和“滑动窗口的最大值”一题思路差不多了。

用一个栈保存元素,用另一个栈来存储最小值,如果新增的元素比栈顶元素小则压入,否则不压入。

如果检测到第一个栈把最小元素弹出了,那么另一个栈也弹出栈顶元素。

“滑动窗口的最大值”更加复杂一点,而且是用deque保存最大值,如果新增的元素比deque中某些元素大,那么必须把小的元素都去除,然后在deque尾部加入这个新元素。

这里附上“滑动窗口的最大值”的代码。

 1 class Solution {
 2 public:
 3     vector<int> maxInWindows(const vector<int>& num, unsigned int size)
 4     {
 5         deque<int> id;
 6         vector<int> record;
 7         if(num.size()==0||size==0||size>num.size())
 8             return record;
 9         for(int i=0;i<size;i++)
10         {
11             while(!id.empty())
12             {
13                 if(id.back()<num[i])
14                     id.pop_back();
15                 else
16                     break;
17                }
18                id.push_back(num[i]);
19         }
20         record.push_back(id.front());
21         if(size<num.size())
22         {      
23             int rear=size;
24             int front=0;
25             while(rear<num.size())
26             {
27                 if(id.front()==num[front])
28                     id.pop_front();
29                 while(!id.empty())
30                 {
31                     if(id.back()<num[rear])
32                         id.pop_back();
33                     else
34                         break;
35                 }
36                 id.push_back(num[rear]);
37                 record.push_back(id.front());
38                 front++;
39                 rear++;
40             }
41         }
42         return record;
43     }
44 };
View Code

 

转载于:https://www.cnblogs.com/vaecn/p/5335153.html

相关文章:

  • Canva(设计图片)
  • Thinkphp 简单表单提交验证
  • 为了媳妇的一张号,我与百度医生杠上了
  • zend studio 的注册码-php的编辑器
  • Android 权限大全中英对照
  • Nightmare --- 炸弹时间复位
  • HDU 5655 CA Loves Stick 水题
  • 跟着实例学习ZooKeeper的用法: Barrier
  • Partition4:增加分区
  • Oracle创建表空间
  • succ
  • 新技能,利用Reflector来修改dll引用
  • 溢出隐藏
  • .Net转前端开发-启航篇,如何定制博客园主题
  • NTFS For Mac 的特点有哪些
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • C++入门教程(10):for 语句
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • DataBase in Android
  • docker容器内的网络抓包
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • js 实现textarea输入字数提示
  • JS实现简单的MVC模式开发小游戏
  • NSTimer学习笔记
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Sublime Text 2/3 绑定Eclipse快捷键
  • ViewService——一种保证客户端与服务端同步的方法
  • vue的全局变量和全局拦截请求器
  • Vue组件定义
  • webpack入门学习手记(二)
  • 大主子表关联的性能优化方法
  • 基于HAProxy的高性能缓存服务器nuster
  • 消息队列系列二(IOT中消息队列的应用)
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 栈实现走出迷宫(C++)
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • scrapy中间件源码分析及常用中间件大全
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (9)目标检测_SSD的原理
  • (Python) SOAP Web Service (HTTP POST)
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (转)Mysql的优化设置
  • ***检测工具之RKHunter AIDE
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .mysql secret在哪_MySQL如何使用索引
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [C#小技巧]如何捕捉上升沿和下降沿
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb
  • [Linux]进程信号(信号入门 | 信号产生的方式 | 信号捕捉初识)