题目
分析
这道题充分利用了题意以及单调栈的特性。
其核心思路是:
- 初始海报数设为建筑物数量
n
——我们假定最多需要n
张海报。 - 使用单调栈维护建筑物的高度序列。
- 当栈顶高度大于即将入栈的元素时弹栈。这是因为:此时,栈顶这个比较高的墙面总归需要一张,所以不用多余的操作。
- 若栈顶元素与即将入栈元素等高,则需要的海报数减1。这是因为:只要高度相等,就可以用一张覆盖整个宽度的海报来覆盖。
- 否则将当前高度入栈。这是为了考虑高度不断递减的情况。
答案
思考
当有两个处于同一个峰两侧的等高建筑物时,它们可以用一张海报覆盖,从而减少所需的海报总数。
代码实现简洁高效,时间复杂度为\(O(n)\),空间复杂度为\(O(n)\),其中n
是建筑物的数量。