https://leetcode-cn.com/problems/min-stack/
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
小菜鸡的尝试:
不是很能懂什么叫常数时间(猜测O(1)?)于是抱着必超时的心态开始写最普通的办法。
1 class MinStack { 2 public: 3 /** initialize your data structure here. */ 4 stack<int> main; 5 stack<int> b; 6 MinStack() { 7 8 } 9 10 void push(int x) { 11 main.push(x); 12 } 13 14 void pop() { 15 main.pop(); 16 } 17 18 int top() { 19 return main.top(); 20 } 21 22 int getMin() { 23 int result = INT_MAX; 24 while (!main.empty()) { 25 if (main.top() < result) result = main.top(); 26 b.push(main.top()); 27 main.pop(); 28 } 29 while (!b.empty()) { 30 main.push(b.top()); 31 b.pop(); 32 } 33 return result; 34 } 35 }; 36 37 /** 38 * Your MinStack object will be instantiated and called as such: 39 * MinStack* obj = new MinStack(); 40 * obj->push(x); 41 * obj->pop(); 42 * int param_3 = obj->top(); 43 * int param_4 = obj->getMin(); 44 */
结果果然超时了,看看大佬是怎么写的吧
扫描二维码关注公众号,回复:
7757131 查看本文章
膜拜大佬代码:
借用辅助栈,空间换时间!!
1 class MinStack { 2 public: 3 /** initialize your data structure here. */ 4 stack<int> main; 5 stack<int> b; 6 MinStack() { 7 8 } 9 10 void push(int x) { 11 main.push(x); 12 if (b.empty() || b.top() >= x) b.push(x); 13 } 14 15 void pop() { 16 int top = main.top(); 17 main.pop(); 18 if (top == b.top()) { 19 b.pop(); 20 } 21 } 22 23 int top() { 24 return main.top(); 25 } 26 27 int getMin() { 28 return b.top(); 29 } 30 }; 31 32 /** 33 * Your MinStack object will be instantiated and called as such: 34 * MinStack* obj = new MinStack(); 35 * obj->push(x); 36 * obj->pop(); 37 * int param_3 = obj->top(); 38 * int param_4 = obj->getMin(); 39 */
b栈的作用就是存放最小元素
当要压入栈的元素小于等于b栈栈顶元素或者b栈为空的时候,在数据入栈main栈的时候也同时入栈b栈(为什么是大于等于而不是大于呢,请看这个例子:)
同理,在出栈操作的时候,如果出栈的元素正好是b栈的栈顶元素,同时将b的栈顶也出栈。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。