题意:
解题思路:
思路:1. 定义一个数据栈,存每次push、pop、top操作;2. 再定义一个辅助栈,每次入栈元素跟辅助栈top元素比较下,如果比辅助栈栈顶元素小则入栈,大的话继续存辅助栈top元素;
图示
:
PHP代码实现:
class MinStack { /** * initialize your data structure here. */ private $top = -1; private $stack = []; private $minStack = []; function __construct() { $this->stack = []; $this->minStack = []; } /** * @param Integer $x * @return NULL */ function push($x) { if ($this->top == -1) { array_push($this->stack, $x); array_push($this->minStack, $x); $this->top++; return true; } $min = $this->minStack[$this->top]; $newMin = $x < $min ? $x : $min; array_push($this->stack, $x); array_push($this->minStack, $newMin); $this->top++; return true; } /** * @return NULL */ function pop() { if ($this->top == -1) return false; array_pop($this->minStack); $this->top--; array_pop($this->stack); } /** * @return Integer */ function top() { return $this->stack[$this->top]; } /** * @return Integer */ function getMin() { return $this->minStack[$this->top]; }}/** * Your MinStack object will be instantiated and called as such: * $obj = MinStack(); * $obj->push($x); * $obj->pop(); * $ret_3 = $obj->top(); * $ret_4 = $obj->getMin(); */
GO代码实现:
type MinStack struct { sk [] int minSk [] int}/** initialize your data structure here. */func Constructor() MinStack { return MinStack{}}func (this *MinStack) Push(x int) { if len(this.sk) == 0 || x <= this.GetMin() { this.minSk = append(this.minSk, x) } this.sk = append(this.sk, x)}func (this *MinStack) Pop() { if this.minSk[len(this.minSk)-1] == this.Top() { this.minSk = this.minSk[:len(this.minSk) - 1] } this.sk = this.sk[:len(this.sk) - 1]}func (this *MinStack) Top() int { return this.sk[len(this.sk) - 1]}func (this *MinStack) GetMin() int { return this.minSk[len(this.minSk)-1]}/** * Your MinStack object will be instantiated and called as such: * obj := Constructor(); * obj.Push(x); * obj.Pop(); * param_3 := obj.Top(); * param_4 := obj.GetMin(); */