劍指offer:包含mini函式的棧
阿新 • • 發佈:2018-12-13
一、題目描述
定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式(時間複雜度應為O(1))。
解題思路
- 要實現演算法的時間複雜度為O(1),常規的排序演算法無法達到;
- 另外考慮只需選出最小的元素,因此可通過沒一個進來與前一個比較,始終儲存最小的值來進行實現。
二、實現程式碼
class Solution {
public:
void push(int value) {
data.push(value);
//如果minval這個棧初始的時候沒空,則存入一個數;否則需要將新的數與minval棧頂的數進行比較,將二者中小的這個存到棧中
if(minval.empty()){
minval.push(value);
}
else{
value < minval.top()? minval.push(value) : minval.push(minval.top());
}
}
void pop() {
minval.pop();
data.pop();
}
int top() {
return data.top();
}
//minval 棧頂儲存的數是找到的最小的數
int min() {
return minval.top();
}
private:
stack<int> data,minval;
};