摘要:
原题链接 很容易分析出边界点是身高比h[i]高的人,单调栈里是形成单调递减栈.能与h[i]形成一对的人h<=h[i],而且h[i]能看到离他最近的比他高的人,所以本题我们需要利用单调栈的边界点和while循环里pop的点,因为要避免重复,所以我们只需要从左边或右边开始计算对数,而且我们还需要统计身高 阅读全文
摘要:
原题链接 在二维上运用单调队列,我们可以想象在矩阵上移动滑动窗口,以左上角为起点,在在窗口内部我们对每一行求最值,再对每一列求最值,那么左上角的元素一定是最值,只需要将每个滑动窗口最值存储即可 没什么坑,有思路很快就能做出来 1 #include <bits/stdc++.h> 2 using na 阅读全文
摘要:
原题链接 思路是来自y总的视频...我的第一反应是dfs.... 求最大矩形面积我们可以联想到那道经典的单调栈例题,因为这道题的n、m都不是很大,所以我们可以用O(n^2)的算法。枚举每一行,将每一行以及上面的矩形都看成直方图,即把每列F的个数当作那道题的阴影部分的高度,然后我们在每一行求它的左右最 阅读全文
摘要:
原题链接 根据题意,我们需要移除k位数字,并且让剩下的数最小,很明显光是找最大的数是没用的,我们需要找的是高位数且这位数字比下一位数字大,说明这一位数字移除就可以让剩下数字更小.但是也有可能出现移除位数不够的情况,此时的单调栈内是单调上升的序列,所以移除前面的数字只会让剩下的数字更大,所以我们要移除 阅读全文
摘要:
原题链接 本题是就是上一道乐扣将去除k位数字的要求换成了去重.要求同样是字典序最小. 这道题的注意点就是: 去重(只出现一次的再大也不能去掉) 已经在栈里的小写字母不需要再push进入,不管它多小 因此很容易分析出此单调栈是单调递增栈,到时候将栈内元素pop出再反转即可 1 class Soluti 阅读全文