【算法】实现特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作
问题:
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作.
【要求】
1,pop,push,getMin操作的时间复杂度都是O(1)。
2,设计的栈类型可以使用现成的栈结构
思路:
准备两个栈,一个是data栈,一个是min栈
data栈每压入一个数,如果data栈压入的是第一个元素,那么min栈直接也压入这个元素。
如果data栈本来就有元素,再压入一个数,那么min栈的栈顶跟该数比较,如果该数小于min栈顶那么min栈压入该数,\
如果该数大于min栈顶,那么min栈重新压入一次min栈顶
如下图:

代码:
class Getminstack{ public function __construct() { $this->datastack=new SplStack();//php内置实现的栈类 $this->minstack=new SplStack();//php内置实现的栈类 } public function push($data){ $minstack=$this->minstack; $datastack=$this->datastack; if($this->datastack->isEmpty()){ $datastack->push($data); $minstack->push($data); return; } $minstacktop=$minstack->top();//获取栈顶元素 $datastack->push($data); $minstacktop<$data?$minstack->push($minstacktop):$minstack->push($data); } public function pop(){ $minstack=$this->minstack; $datastack=$this->datastack; if($datastack->isEmpty()){ throw new Exception("没有东西给你榨了,兄弟"); } $minstack->pop(); return $datastack->pop(); } public function getmin(){ $minstack=$this->minstack; return $minstack->top(); } } $b=new Getminstack(); $b->push(5); $b->push(9); $b->push(3); $b->push(6); $b->push(8); var_dump($b->getmin());//3 $b->pop(); $b->pop(); $b->pop(); var_dump($b->getmin());//5

浙公网安备 33010602011771号