21. 包含min函数的栈
来源:互联网 发布:西瓜影音播放器mac版 编辑:程序博客网 时间:2024/06/06 13:22
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
解析
添加一个辅助栈,存放与数据栈中每个元素对应的当前栈中的最小值。
维护辅助栈:
1. 入栈:把新元素添加到数据栈,当新元素比之前的最小元素小时,把新元素添加到辅助栈中,否则,把之前的最小元素重复插入到辅助栈中。
2. 出栈:从数据栈弹出元素的同时,也要将辅助栈中,与该元素对应的最小值弹出辅助栈。
实现
// 《剑指Offer——名企面试官精讲典型编程题》代码// 著作权所有者:何海涛#pragma once#include <stack>#include <assert.h>template <typename T> class StackWithMin{public: StackWithMin(void) {} virtual ~StackWithMin(void) {} T& top(void); const T& top(void) const; void push(const T& value); void pop(void); const T& min(void) const; bool empty() const; size_t size() const;private: std::stack<T> m_data; // 数据栈,存放栈的所有元素 std::stack<T> m_min; // 辅助栈,存放栈的最小元素};template <typename T> void StackWithMin<T>::push(const T& value){ // 把新元素添加到辅助栈 m_data.push(value); // 当新元素比之前的最小元素小时,把新元素插入辅助栈里; // 否则把之前的最小元素重复插入辅助栈里 if(m_min.size() == 0 || value < m_min.top()) m_min.push(value); else m_min.push(m_min.top());}template <typename T> void StackWithMin<T>::pop(){ assert(m_data.size() > 0 && m_min.size() > 0); m_data.pop(); m_min.pop();}template <typename T> const T& StackWithMin<T>::min() const{ assert(m_data.size() > 0 && m_min.size() > 0); return m_min.top();}template <typename T> T& StackWithMin<T>::top(){ return m_data.top();}template <typename T> const T& StackWithMin<T>::top() const{ return m_data.top();}template <typename T> bool StackWithMin<T>::empty() const{ return m_data.empty();}template <typename T> size_t StackWithMin<T>::size() const{ return m_data.size();}
0 0
- 21. 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min 函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 基于.NET实现淘宝发布宝贝功能(三)
- hdu 1798 - Tell me the area(求两圆相交面积) 解题报告
- 配置php生产环境——notice warning消除
- objective-c类以及方法调用的基本总结
- HDOJ 1551 Cable master(二分)
- 21. 包含min函数的栈
- Andrew Ng Machine Learning 专题【Logistic Regression & Regularization】
- RMQ算法 快速求区间最大最小值
- 自动布局Cell
- 线段覆盖长度
- HTML页面插入Flash动画及背景音乐
- POJ 1463 Strategic game
- HDU 1028(Ignatius and the Princess III)区间DP之整数划分
- 多个maven项目集成