
单调队列单调栈
小胡同的诗
千里之行,始于足下
展开
-
LeetCode42 接雨水(单调栈 | 联通块 | 动态规划预处理 | 双指针 | 容斥)
题目链接:leetcode42题目大意给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6解题思路首先要先明白一个通识,即木桶原理。木桶的容量取决于最低的挡板高度。暴力枚举对于每一个柱子,我们都可以单独计算它对整体容量的贡献,原创 2020-08-24 17:42:46 · 268 阅读 · 0 评论 -
LeetCode3 无重复字符的最长子串(滑动窗口)
题目链接:leetcode3题目大意给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是原创 2020-08-18 23:36:55 · 134 阅读 · 0 评论 -
滑动窗口问题(单调队列)
链接:滑动窗口题目详情:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[...原创 2019-08-01 11:04:03 · 503 阅读 · 0 评论 -
LeetCode121. 买卖股票的最佳时机(单调栈+动态规划)
题目链接:Leetcode121思路:1,找前面和它比最小的更新答案,可以维护一个单调栈解决,每次跟栈底比(实际上是单调队列,但不用控制窗口大小就是了)class Solution {public: int maxProfit(vector<int>& prices) { int n = prices.size(); if ...原创 2019-09-05 17:00:18 · 1074 阅读 · 0 评论 -
算法实验题3.4 亲兄弟问题(单调栈)
题目描述思路根据题目描述,每个位置的数要去找后面第一个大于等于它值的位置。可以维护一个单调递减栈,当一个值被弹出时就是该位置所在的答案,最后要记得把没出栈的位置标记-1,这些都是找不到答案的。由于每个元素只会出栈进栈各一次,所以复杂度O(n)O(n)O(n)。实现#include <bits/stdc++.h>using namespace std;const in...原创 2019-09-24 10:51:57 · 1138 阅读 · 0 评论