嗯嗯仍然先要感谢zhw老师
zhw说过,数据结构只是一种维护算法的工具,学习一种数据结构,就要了解,这个数据结构能做维护什么东西
栈,一种先进后出的数据结构。在这几天的学习中,也加深了对栈的认识
栈可以维护以下操作:
1,支持添加一个数,删除栈顶的数,O(n)求栈中所有数的最大(小)值
2,支持添加一个数,删除栈顶的数,O(n)求栈中最大(小)前(后)缀和
3,在一列数中,寻找最近的满足某个条件的元素
第一种操作只要每进入一个数,在栈顶位置取max/min就好了
第二种操作当进入一个数时,求两个值:当该位置的连续和以及最大前缀和,作比较更新最大前缀和
如果是后缀和:最大前后和=总和-最小前缀和
最小也同理
第三种,只要将满足条件的元素加入,在用到时取栈顶就好了
栈还有一个经典的应用——单调栈
即维护一个单调递增/减的栈,从而更新某些值
在涉及到双头维护时,不用同时维护递增和递减的栈,只用做完一个,再倒过来做另外一个就好了
另外,再注意下两个栈顶相对,同时维护某一组数的情况