题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
提交链接:点击
思路:利用一个辅助栈,入栈的时候,如果入A栈元素的value比A栈栈顶元素值大,则只入A栈,小于等于等AB都入;出栈的时候,如果AB栈顶元素不相等,A出,B不出。
代码:
class Solution { public: stack<int> stack1,stack2; void push(int value) { //如果入栈的是最小值,则同样入辅助栈 if(stack1.empty()){ //当栈为空的时候,将value同时入栈,因为一个元素的时候他就是最小值 stack1.push(value); stack2.push(value); }else{//当栈不为空的时候,将最小值入辅助栈 if(value<=stack1.top()){ stack2.push(value); } stack1.push(value); } /* stack1.push(value); if(stack2.empty()) stack2.push(value); else if(value<=stack2.top()){ stack2.push(value); } */ } void pop() { int temp=stack1.top(); stack1.pop(); if(temp==stack2.top()) stack2.pop(); //如果弹出的是最小值,则辅助栈也弹出 } int top() { return stack1.top(); } int min() { return stack2.top(); } };