1. 程式人生 > >劍指offer:包含mini函式的棧

劍指offer:包含mini函式的棧

一、題目描述

定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式(時間複雜度應為O(1))。

解題思路

  1. 要實現演算法的時間複雜度為O(1),常規的排序演算法無法達到;
  2. 另外考慮只需選出最小的元素,因此可通過沒一個進來與前一個比較,始終儲存最小的值來進行實現。

二、實現程式碼

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; };

三、參考資料