单调队列 Monotonic Queue / 单调栈 Monotonic Stack
2018-11-16 22:45:48
一、单调队列 Monotone Queue
- 239. Sliding Window Maximum
问题描述:
问题求解:
本题是一个经典的可以使用双端队列或者说单调队列完成的题目,具体来说,就是通过双端队列将可能的最大值维护起来。
public int[] maxSlidingWindow(int[] nums, int k) {
if (nums == null || nums.length < k || k == 0) return new int[0];
Deque<Integer> q = new LinkedList<>();
int[] res = new int[nums.length - k + 1];
for (int i = 0; i < nums.length; i++) {
while (!q.isEmpty() && q.getLast() < nums[i]) q.pollLast();
q.addLast(nums[i]);
if (i >= k - 1) {
res[i - k + 1] = q.getFirst();
if (q.getFirst() == nums[i - k + 1]) q.pollFirst();
}
}
return res;
}
二、单调栈 Monotone Stack
什么是Monotonic Stack?
答:从栈顶到栈底是按照单调顺序排列的。
- 739. Daily Temperatures
问题描述:
问题求解:
维护一个从栈顶到栈底单调递增的栈。
从末尾向前遍历,如果当前的数值比栈顶的数值要大的话,那么显然更小的数值是不再需要的了,直接pop即可。
public int[] dailyTemperatures(int[] T) {
int[] res = new int[T.length];
Stack<int[]> stack = new Stack<>();
for (int i = T.length - 1; i >= 0; i--) {
while (!stack.isEmpty() && stack.peek()[0] <= T[i]) stack.pop();
res[i] = stack.isEmpty() ? 0 : stack.peek()[1] - i;
stack.push(new int[]{T[i], i});
}
return res;
}
- 1019. Next Greater Node In Linked List
问题描述:
问题求解:
public int[] nextLargerNodes(ListNode head) {
List<Integer> nums = new ArrayList<>();
for (ListNode cur = head; cur != null; cur = cur.next) {
nums.add(cur.val);
}
int[] res = new int[nums.size()];
Stack<Integer> stack = new Stack<>();
for (int i = nums.size() - 1; i >= 0; i--) {
while (!stack.isEmpty() && stack.peek() <= nums.get(i)) stack.pop();
res[i] = stack.isEmpty() ? 0 : stack.peek();
stack.push(nums.get(i));
}
return res;
}
- 901. Online Stock Span
问题描述:
问题求解:
public class StockSpanner {
Stack<int[]> stack;
int idx; public StockSpanner() {
stack = new Stack<>();
stack.push(new int[]{Integer.MAX_VALUE, -1});
idx = 0;
} public int next(int price) {
while (stack.peek()[1] <= price) stack.pop();
int res = idx - stack.peek()[1];
stack.push(new int[]{price, idx});
idx++;
return res;
}
}
单调队列 Monotonic Queue / 单调栈 Monotonic Stack的更多相关文章
- C++ 队列(queue)堆栈(stack)实现基础
Queue 在C++中只要#include<queue>即可使用队列类,其中在面试或笔试中常用的成员函数如下(按照最常用到不常用的顺序) 1. push 2. pop 3. size 4. ...
- zjnu1735BOB (单调队列,单调栈)
Description Little Bob is a famous builder. He bought land and wants to build a house. Unfortunately ...
- 单调栈&单调队列入门
单调队列是什么呢?可以直接从问题开始来展开. Poj 2823 给定一个数列,从左至右输出每个长度为m的数列段内的最小数和最大数. 数列长度:\(N <=10^6 ,m<=N\) 解法① ...
- 单调栈and单调队列(此文太多坑了,以后再填)
单调栈 单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性,可能为单调递增,也可能为单调递减. 性质: 单调栈里的元素具有单调性 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除 使用单调 ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- 单调队列&单调栈
单调队列 例题: Poj 2823给定一个数列,从左至右输出每个长度为m的数列段内的最小数和最大数.数列长度:N<=106,m<=N 对于单调队列,我们这样子来定义: 1.维护区间最值 2 ...
- HDU 4123(树的直径+单调队列)
Bob’s Race Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 1126. Magnetic Storms(单调队列)
1126 最简单的单调队列应用吧 单调队列是指在一个队列中各个元素单调 递增(或者递减),并且各个元素的下标单调 递增. 单调队列的大体操作 进队时,将进队的元素为e,从队尾往前扫描,直到找到一个不大 ...
- 算法笔记--单调队列优化dp
单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...
随机推荐
- 一句话说清楚cache和buffer
我们说真正掌握和理解一个定义或者概念或者技术点最好的方式就是能够直观的展现它是什么样的,或者像什么样的,关于cache和buffer,刚刚看到一个极为显而易见的类比解释. buffer就像弹簧,用于减 ...
- 11: Nginx安装lua支持
1.1 Nginx 使用lua脚本 注:需要LuaJIT-2.0.4.tar.gz,ngx_devel_kit,lua-nginx-module 1.Nginx安装lua支持 wget -c http ...
- 本地win7ping VM linux ipv6地址问题
前述 在windows和linux同时安装ipv6之后,系统将会自动分配一个link-local(链接本地)地址也就是ifconfig -a看到的一行[inet6 addr: fe80::20c:29 ...
- 基础_cifar10_序贯
今天的基础研究主要是在cifar10数据集上解决一下几个问题: 1.从头开始,从最简单的序贯开始,尝试model的构造: 2.要将模型打印出来.最好是能够打印出图片,否则也要summary; 3.尝试 ...
- bzoj 2753 [SCOI 2012] 滑雪与时间胶囊 - Prim
题目传送门 传送点I 传送点II 题目大意 给定一个有$n$个点$m$条边的图,每个点有一个高度$h_{i}$,能从$u$经过一条边到达$v$,当且仅当存在一条边是$(u, v)$或$(v, u)$, ...
- ERROR: please install the following Perl modules before executing ./mysql_install_db
centos7.5 安装mysql数据库报错 问题: [root@db02-52 scripts]# ./mysql_install_db --user=mysql --basedir=/applic ...
- Java.util.properties读取配置文件分析
Java.util.properties API链接: https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html Clas ...
- C# 文件与二进制之间的转换
/// <summary> /// 工具类:文件与二进制流间的转换 /// </summary> public class FileBinaryConvertHelper { ...
- Hunter’s Apprentice 【判断多边形边界曲线顺逆时针】
问题 H: Hunter's Apprentice 时间限制: 1 Sec 内存限制: 128 MB 提交: 353 解决: 39 [提交] [状态] [命题人:admin] 题目描述 When ...
- (转)Introductory guide to Generative Adversarial Networks (GANs) and their promise!
Introductory guide to Generative Adversarial Networks (GANs) and their promise! Introduction Neural ...