题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
题目分析
首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的数据进行比较,所以肯定需要一个临时栈嘛,当然这只是一种思路,就是其余的操作pop,push这些和栈的操作一样,只是min的时候借助下临时栈将原来栈弹出来的保存下,以便放回去。
另外一种思路,也就是剑指offer里面推荐的思路就是增加了一个辅助栈,每次压入数据栈时,把当前栈里面最小的值压入辅助栈当中。这样辅助栈的栈顶数据一直是数据栈中最小的值。
比如,data中依次入栈,
5
,
4
,
3
,
8
,
10
,
11
,
12
,
1
则min依次入栈,
5
,
4
,
3,
3, 3, 3, 3,
1
代码
const stack = [], minStack = []; let tmp = null; function push(node) { if (tmp !== null) { if (tmp > node) { tmp = node; } stack.push(node); minStack.push(tmp); } else { tmp = node; stack.push(node); minStack.push(tmp); } } function pop() { stack.pop(); minStack.pop(); } function top() { return stack[stack.length - 1]; } function min() { return minStack[minStack.length - 1]; }