設計包含min函式的棧:
定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素;
要求函式min、push以及pop的時間複雜度都是o(1)。
分析:要得到當前棧的最小元素,且時間複雜度為o(1),這不但要求知道當前棧中的最小元素值(或其所在位置),而且要知道次小元素,這樣才能保證,如果當前棧頂元素為最小元素,被pop後,還能以o(1)的時間複雜度找到次小元素。這樣依次類推,我們可以發現,在最苛刻的情況下(所有棧元素以從大到小的順序入棧),需要乙個和棧大小一樣的輔助棧來滿足時間複雜度o(1)的要求。這應該是一種典型的以空間換時間吧。
基於以上分析,以int型別為例(當然可以使用模板、泛型),我們可以定義棧結構如下:
struct minstackelement
;struct minstack
;//stack initialization
minstack minstackinit(int maxsize)
void minstackfree(minstack &stack)
//push
void minstackpush(minstack &stack, int d)
minstackelement* p = &stack.data[stack.top];
p->data = d;
if(stack.top==0)
p->indexofmin=0;
else
stack.top ++;
}//pop
int minstackpop(minstack& stack)
stack.top--;
return stack.data[stack.top].data;
}// get the min element
int minstackmin(minstack& stack)
return stack.data[ ( stack.data[stack.top-1].indexofmin) ].data;
}上面的方法是通過設定當前棧中的最小元素所在位置來獲取最小值,當然也可以通過直接記錄當前棧中的最小值得方法來獲取最小值,而且這樣會更簡單些。
設計包含min函式的棧
本文 題目 定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min push以及pop的時間複雜度都是o 1 分析 這是去年google的一道面試題。我看到這道題目時,第一反應就是每次push乙個新元素時,將棧裡所有逆序元素排序。這樣棧頂元素將是最小元素。但由於不能保證最後p...
設計包含min函式的棧
定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素,要求函式min,push及pop的時間複雜度都是o 1 棧的資料結構包含兩個普通棧,乙個棧存資料,另乙個棧存最小值 或最小值的位置,如果用stl裡的棧,則不能存最小值的位置,因為stl裡的stack不支援下標索引訪問 cpp view ...
設計包含min函式的棧
題目 定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min push以及pop的時間複雜度都是o 1 注 這是06年一道google的面試題.先來說個常規解和他的乙個優化,常規解的時間複雜度符合要求,但需要線性的額外空間.常規解 參考 除了題目要求的棧之外新開乙個棧,用來記...