这是一道被锁住的题,需要LeetCode会员才能做。
还好lintcode上也有。最大栈

分析:前4个操作比较简单,最难处理的是第5个操作。
思路:
1.可以使用两个栈,但是这样的复杂度为O(n),不太好。
2.使用list+map,list中存放数据,map中存放值以及值对应的所有迭代器的集合,迭代器的集合使用vector存储,vector尾部的迭代器为当前值对应的最靠近栈顶的迭代器,那么我们在删除栈中最靠近栈顶的最大元素时,只需要获得最大值对应vector的最后一个元素(迭代器),然后在list和vector中将其删除即可。
class MaxStack {
public:
/** initialize your data structure here. */
MaxStack() {
}
void push(int x) {
list.insert(list.begin(), x)

本文详细解析了LeetCode上的最大栈题目,介绍了一种使用list和map的数据结构解决方案,通过维护一个双向链表和一个映射表来实现高效的栈操作和最大值查找。
最低0.47元/天 解锁文章
428

被折叠的 条评论
为什么被折叠?



