
单调队列单调栈
小胡同的诗
千里之行,始于足下
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
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 · 281 阅读 · 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 · 142 阅读 · 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 · 511 阅读 · 0 评论 -
LeetCode121. 买卖股票的最佳时机(单调栈+动态规划)
题目链接:Leetcode121 思路: 1,找前面和它比最小的更新答案,可以维护一个单调栈解决,每次跟栈底比(实际上是单调队列,但不用控制窗口大小就是了) class Solution { public: int maxProfit(vector<int>& prices) { int n = prices.size(); if ...原创 2019-09-05 17:00:18 · 1081 阅读 · 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 · 1145 阅读 · 0 评论