剑指offer-21:包含min函数的栈

来源:互联网 发布:linux 内核参数配置 编辑:程序博客网 时间:2024/05/20 19:49

定义栈的数据结构,在该类型中实现一个能够得到栈的最小元素的min函数,该栈中调用min, push, pop的时间复杂度都是O(1)。

分析

  • 要保持栈原本性质,就需要一个栈A存放原始数据
  • 要得到栈当前最小元素,需要一个辅助栈B,专门存储当前的最小值
  • A中压栈,B中压当前的最小值(要么是新的最小,要么是B栈顶最小)

代码:

// offer-21-stack_min.cpp : 定义控制台应用程序的入口点。////#include "stdafx.h"#include <iostream>#include <stack>using namespace std;// 定义一个类,表示新栈类型class StackMin {public:    //压栈    void push(int value) {        // 数据栈压栈        m_data.push(value);        // 辅助栈压入新的最小        if(m_min.size()==0 || m_min.top() > value )            m_min.push(value);        // 辅助栈压入原最小,仍为当前最小        else            m_min.push(m_min.top());    }    // 弹栈    void pop() {        m_data.pop();        m_min.pop();    }    // 获取当前栈顶,只和数据栈相关    int top() {        return m_data.top();    }    // 获取最小,只和辅助栈相关    int min() {        return m_min.top();    }private:    stack<int> m_data;  // 数据栈    stack<int> m_min; // 存当前最小元素的栈};// 测试int _tmain(int argc, _TCHAR* argv[]){    Solution a;    a.push(3);    a.push(4);    a.push(2);    a.push(1);    cout << a.min() << endl;    a.pop();    cout << a.min() << endl;    return 0;}
原创粉丝点击