class MinStack {
private $stack = [];
private $minStack = [];
/**
*/
function __construct() {
$this->stack = [];
$this->minStack = [];
}
/**
* @param Integer $val
* @return NULL
*/
function push($val) {
$this->stack[] = $val;
if(!empty($this->minStack)){
$min = min($val, $this->minStack[count($this->minStack) - 1]);
}else{
$min = $val;
}
array_push($this->minStack, $min);
}
/**
* @return NULL
*/
function pop() {
array_pop($this->stack);
array_pop($this->minStack);
}
/**
* @return Integer
*/
function top() {
if(!empty($this->stack)){
return $this->stack[count($this->stack) - 1];
}
return null;
}
/**
* @return Integer
*/
function getMin() {
if(!empty($this->minStack)){
return $this->minStack[count($this->minStack) - 1];
}
return null;
}
}
思路
使用普通栈(Stack)、和最小栈(MinStack)两个栈
步骤
PHP实现
扩展
对于最大栈的实现原理也类似
附录
https://leetcode-cn.com/problems/min-stack/