定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
A: 对栈中每个元素增加一个域,表明在其之前进栈的元素中最小元素的index,保证在最小元素出栈之后依然能在O(1)的时间内取出剩余元素中的最小元素。
class stack{
private $dat = array();
private $height = 0;
private $min_index = -1;
public function push($num){
$temp = $this->min_index;
if($this->min_index == -1 || $this->dat[$this->min_index]['data'] > $num){
$this->min_index = $this->height;
}
$item['data'] = $num;
$item['min'] = $temp;
$this->dat[$this->height++] = $item;
}
public function pop(){
$item = $this->dat[--$this->height];
if($this->min_index == $this->height){
$this->min_index = $item['min'];
}
return $item['data'];
}
public function min(){
return $this->dat[$this->min_index]['data'];
}
}