S2中每个元素添加一个计数器。这样当连续3次2出栈,S2中的2才出栈。
#include <iostream> #include <stack> struct DataCount { int data; int count; DataCount(int vData = std::numeric_limits<int>::infinity()) : data(vData), count(0) {} }; class Stack { public: Stack() {} ~Stack() {} void push(int vData) { m_Data.push(vData); if (m_MinData.empty()) { m_MinData.push(DataCount(vData)); } else { if (vData < m_MinData.top().data) { m_MinData.push(DataCount(vData)); } else if (vData == m_MinData.top().data) { ++m_MinData.top().count; } } } void pop() { if (m_Data.empty()) { std::cout << "Empty stack\n"; return; } int Data = m_Data.top(); m_Data.pop(); if (Data == m_MinData.top().data) { if (--m_MinData.top().count == 0) { m_MinData.pop(); } } } int getMin() { if (m_MinData.empty()) { std::cout << "Empty stack\n"; return; } return m_MinData.top().data; } private: std::stack<int> m_Data; std::stack<DataCount> m_MinData; };
011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)
原文地址:http://blog.csdn.net/xiaoliangsky/article/details/38762113