2.
设计包含min函数的栈。
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小(大)元素。
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小(大)元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
解析:本题要求自定义栈结构及操作(push,pop等),无论入栈多少个元素,元素的具体值为多少,在pop(n>=0次)操作后都可以通过自定义的FinMin()找到当前栈中的最小(大)元素。
思路:借助辅助栈。栈stack 用于存储入栈元素,栈minStack 用于记录stack栈中最小元素在stack中的位置。
(1).第一个将要进入stack栈的元素同样也要进入到minSstck栈中
(2).此后,元素直接进入stack栈中,而 进入minStack栈的元素arg要满足 arg < stack[minStack[minStack.Count - 1]]条件。
因此可以写成 :
stack.push(arg);
if( minStack.IsEmpty() || arg < stack[minStack[minStack.Count - 1] ] ) { minStack.Push( stack.Count - 1 ) } ( 以上为伪码,具体语言具体实现)
这样一来,minStack中记录的是stack当前栈中元素的最小值(第一次出现)在该栈中的位置。