ntm
inim
um()
int \;minimum()
intmin
imum
(),其時間複雜度為o(1
)o(1)
o(1)
。該演算法的缺點是當棧中元素較多時浪費了較多空間。以下是實現**和測試**。測試結果如圖1所示。
//實現**
class
nodewithmin
nodewithmin operator
=(nodewithmin copyobject)
intgetvalue()
intgetminimum()
void
setvalue
(int va)
void
setminimum
(int min)};
class
mystack;~
mystack()
;bool
isfull()
;bool
isempty()
; nodewithmin peek()
;void
push
(nodewithmin value)
else
else
} topindex++;}
; nodewithmin pop()
;int
minimum()
void
printmystack()
cout <<
"mystack's minimum value "
<<
"is "
<<
minimum()
<
cout <<
"mystack's topindex "
<<
"is "
<< topindex << endl;
}private
:int stack_capacity;
nodewithmin* values;
int topindex;
};
//測試**
圖1.
以下演算法是對以上演算法的一種改進,可以減少用來儲存當前棧的最小值的額外的空間,特別是當前面進棧的資料值較小時,效果更好。該演算法用另外乙個棧來儲存資料棧的當前最小值。當第乙個值入資料棧時,儲存最小值的棧之後只會儲存第乙個資料棧的值以及之後比該值小的資料棧的值,因此節省了空間。求棧中最小值的函式為int
mini
mum(
)int \;minimum()
intmin
imum
(),其時間複雜度為o(1
)o(1)
o(1)
。以下是實現**和測試**。測試結果如圖2所示。
// 實現**
class
mystack;~
mystack()
;bool
isfull()
;bool
isempty()
;int
peek()
;void
push
(int value)
;int
pop();
void
printmystack()
cout <<
"mystack's topindex "
<<
"is "
<< topindex << endl;
}int
getcapacity()
void
setcapacity
(int value)
void
setvalues
(int
*value)
int*
getvalues()
void
settopindex
(int top=0)
intgettopindex()
private
:int stack_capacity;
int* values;
int topindex;};
class
mystackwithmin
:public mystack
~mystackwithmin()
void
push
(int value)};
intpop()
return popvalue;};
intminimum()
return
(*s)
.peek()
;}private
: mystack *s;
};
//測試**
圖2.
棧找最小值問題
question 實現乙個特殊的棧,在實現棧的基本功能的基礎上,在實現回棧中最小元素的操作 thinking sketch 定義倆個棧。同時壓入同時彈出,比如說乙個data,乙個min,當data棧新壓入的數大於min的棧頂,重複壓入min棧頂數 detailed 分別定義data,min倆個棧,p...
Lintcode 帶最小值的棧
帶最小值操作的棧 描述 筆記 資料 評測 實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o 1 時間內完成。您在真實的面試中是否遇到過這個題?yes 注意事項 如果堆疊中沒有數字則不能進行min方法的呼叫 樣...
帶最小值操作的棧
描述 實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o 1 時間內完成。樣例 push 1 pop return 1 push 2 push 3 min return 2 push 1 min return ...