包含min函数的栈
题:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路:若是只要返回最小一个元素,只要每次加入时,和栈顶元素对比就行,小于栈顶元素就先删除栈顶元素,然后加入。但若是想所有元素的出栈顺序是从小到大呢?
这时我们需要一个辅助栈,辅助栈中从大到小(栈底到栈顶)依次存放当前数据栈中的最小值。当有新元素来时,若小于辅助栈中的元素,则加入辅助栈,同时也加入数据栈,若大于辅助栈中的元素,则只加入数据栈,并将辅助栈栈顶元素再次加入辅助栈。出栈时,数据栈和辅助栈同时出栈,要最小值则返回辅助栈栈顶。代码如下:
1 class Solution { 2 public: 3 stack<int> stackData,stackMin; 4 void push(int value) //题目给 5 { 6 stackData.push(value); 7 if(stackMin.empty()||value<stackMin.top()) 8 stackMin.push(value); 9 else 10 stackMin.push(stackMin.top()); 11 } 12 void pop() //题目给 13 { 14 //assert(stackData.size()>0&&stackMin.size()>0); 15 stackData.pop(); 16 stackMin.pop(); 17 } 18 int top() //题目给 19 { 20 return stackData.top(); 21 } 22 int min() //题目给 23 { 24 return stackMin.top(); 25 } 26 };
过程可以画图理解。