題目來源:《劍指offer》面試題21
題目:定義棧的資料結構,請在該類型中實作一個能夠得到棧的最小元素的min函數。在該棧中,調用min,push以及pop的時間複雜度都是O(1)。
分析:假設用于存儲主要資料的棧稱為資料棧。我們增加一個輔助棧,它的棧頂元素永遠是目前資料棧中元素的最小值。當插入元素時,如果插入的元素比輔助棧棧頂還小,那麼就往輔助棧壓入這個資料作為目前資料棧新的最小值。如果大的話,再次壓入輔助棧的棧頂元素,表明來了一個新元素後,最小值沒有變換。
//m_data是資料棧,m_min是輔助棧
template<typename T> void StackWithMin<T>::push(const T& value) {
m_data.push(value);
if (m_min.empty() || value < m_min.top())
m_min.push(data);
else
m_min.push(m_min.top());
}
template<typename T> void StackWithMin<T>::pop(const T& value) {
m_min.pop();
m_data.pop();
}
template<typename T> const T& StackWithMin<T>::min() const {
return m_min.top();
}