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的更多相关文章

  1. C++ 队列(queue)堆栈(stack)实现基础

    Queue 在C++中只要#include<queue>即可使用队列类,其中在面试或笔试中常用的成员函数如下(按照最常用到不常用的顺序) 1. push 2. pop 3. size 4. ...

  2. zjnu1735BOB (单调队列,单调栈)

    Description Little Bob is a famous builder. He bought land and wants to build a house. Unfortunately ...

  3. 单调栈&单调队列入门

    单调队列是什么呢?可以直接从问题开始来展开. Poj 2823 给定一个数列,从左至右输出每个长度为m的数列段内的最小数和最大数. 数列长度:\(N <=10^6 ,m<=N\) 解法① ...

  4. 单调栈and单调队列(此文太多坑了,以后再填)

    单调栈 单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性,可能为单调递增,也可能为单调递减. 性质: 单调栈里的元素具有单调性 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除 使用单调 ...

  5. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  6. 单调队列&单调栈

    单调队列 例题: Poj 2823给定一个数列,从左至右输出每个长度为m的数列段内的最小数和最大数.数列长度:N<=106,m<=N 对于单调队列,我们这样子来定义: 1.维护区间最值 2 ...

  7. HDU 4123(树的直径+单调队列)

    Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. 1126. Magnetic Storms(单调队列)

    1126 最简单的单调队列应用吧 单调队列是指在一个队列中各个元素单调 递增(或者递减),并且各个元素的下标单调 递增. 单调队列的大体操作 进队时,将进队的元素为e,从队尾往前扫描,直到找到一个不大 ...

  9. 算法笔记--单调队列优化dp

    单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...

随机推荐

  1. MacOS Docker 安装

    使用 Homebrew 安装 macOS 我们可以使用 Homebrew 来安装 Docker. Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Home ...

  2. 01: Django rest framework 基础

    1.1 RESTful API设计规范 参考地址: http://www.cnblogs.com/wupeiqi/articles/7805382.html   1.API与用户的通信协议,总是使用H ...

  3. Kali系列之Hydra/Medusa mysql密码爆破

    hydra hydra -L /home/chenglee/zidian/user.txt -P /home/chenglee/zidian/wordlist.TXT 192.168.137.133 ...

  4. 搭建ldap服务器及web管理服务--phpldapadmin

    系统版本:centos6 安装配置openldap: yum install openldap openldap-servers openldap-clients openldap-devel com ...

  5. forever 用法

    安装过Node.js后再安装forever,需要加-g参数,因为forever要求安装到全局环境下: npm install forever -g 常用指令: npm install forever ...

  6. bzoj 3325 密码 - Manacher

    题目传送门 需要root权限的传送点 题目大意 已知一个串,以每个字符为中心的最长回文串长,以及每两个字符中间为中心的最长回文串长.求字典序最小的这样一个串.题目保证有解. 考虑Manacher的过程 ...

  7. C#操作字符串方法总结

    /* ######### ############ ############# ## ########### ### ###### ##### ### ####### #### ### ####### ...

  8. Android 源码编译 指定userdata.img、system.img、cache.img容量大小【转】

    本文转载自:https://blog.csdn.net/baodinglaolang/article/details/49791041 修改build/target/board/generic_x86 ...

  9. 4698: Sdoi2008 Sandy的卡片

    前言 总之这个东西说起来很麻烦就是了, 思路 差分合并+后缀数组+二分(dddl) 类似于那个bzoj1031的复制子串和那个poj1743的差分 来看个例子 3 5 1 2 3 4 5 4 1 1 ...

  10. 洛谷luogu2782

    P2782 友好城市 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.每对友好城市都向政府申 ...