Hard Greedy Problems
昨晚从小炒肉那边知道了单调队列,但是代码不是很好理解,看了谢老师的代码,才发现这个更适合我。维护左边右边可以看到的最远的距离,做完indeed D题,和
最大矩阵只是一点点区别。
两次维护单调递减序列,如果大于栈顶,一直pop 直到小于栈顶就可以确定当前能看到左边的最远距离了,然后从右边到左边再来一遍,计算看到右边最远的距离。
然后运用到最大矩形面积,也即刷广告问题,典型的单调队列。
但是今天看了container with most water 却不行, 递增递减都不行。后来发现有on算法,每次维护左右边界,然后往中间移动,如果高度变小了,得到的边界不可能更优,因为
距离短了,高度还不增,一定变小,left++ 或者right— 知道遇到比当前height更大的为止。leftright累计移动On因此还是on
trap water 这题记录每个点左侧最大和右侧最大,则可以确定当前柱子最终可以装的水量。左到右扫描,有道做也来一遍,li=max(l(i-1),ai)
最后ans+=min(li,ri)-ai累加每个柱子的水量就是结果了。