菜 682(E)
中 71(C-) 、394(C+)
危 42(B+) 、84(A)
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
小练总结:栈的题相对来说比较简单,需要注意的问题就是模型转化跟栈结合时需要细心一些。实际问题转化为算法时,逻辑上的判断至关重要。
682. 棒球比赛(E)
分析:栈初试身手。选了一道简单难度的题。嗯,果然很简单。读清题意,解答很容易的。栈最后位,表示就是用队列的[-1]
1 | class Solution: |
71. 简化路径(C-)
分析:本质上还是一道简单的栈表示。题意理解上稍微复杂一点。如果不熟悉Linux路径表示,需要细心看一下。..删除的是前面出现的路径。整体思路就是分段,去空,判断,构建栈。最后别忘了拼接。
1 | class Solution: |
394. 字符串解码(C+)
分析:题意容易理解。关键点在于,数字和字母构建双重栈。如果没有数字添加默认1,最后依次匹配相乘。关键点在于,字符拼接时注意翻转。因为栈后进先出。
1 | class Solution: |
遇事不决用正则。正则用好了,超级容易实现,然鹅!这道题考察栈。
1 | class Solution(object): |
42. 接雨水(B+)
分析:hard难度,就有点意思了。感觉更多的是,找到规律。两边分别遍历一下,墙和水被加了两次,再减去墙。最后减去整体面积。
1 | class Solution: |
84. 柱状图中最大的矩形(A)
分析:感觉许久未逢的几何生疏感,想了一阵才缕清算法思路,虽然对步骤还有点违和感。
算法书写不难,不过这个思路的构建还是需要学习一下的。关键点在于,右侧高于左侧,放入栈中。低于左侧,就开始计算面积。判断,左右边界,求面积。是i中的高,还是栈中的高,直接影响面积。最后加个0是收尾计算。
1 | class Solution: |