微软100题(2) min函数栈
来源:互联网 发布:淘宝店铺招牌模板下载 编辑:程序博客网 时间:2024/06/03 23:01
2.设计包含min 函数的栈。
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
思路二:借助辅助栈
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
要能在O(1)时间拿到min值,则栈中每个位置都应该有关于最小值的信息,否则无法直接获得最小值
所以,有两种思路,一是栈中每个值为一个结点,节点包括当前value和min值,另一种则借助辅助栈,使得辅助栈中只保存对应的min信息
思路一:
struct MinStackElement{ int data; int min;};struct MinStack{ MinStackElement *data; int top; int size;};MinStack MinStackInit(int max_size){ MinStack stack; stack.size=max_size; stack.data=(MinStackElement*)malloc(sizeof(MinStackElement)*max_size); stack.top=0; return stack;}void freeMinStack(MinStack stack){ free(stack.data); stack.top=0;}void MinStackPush(MinStack stack,int d){ if(stack.top==stack.size) cout<<"error"; MinStackElement *p=stack.data[stack.top]; p->data=d; p->min=(stack.top==0?d:stack.data[top-1]); if(p->min>d) p->min=d; top++;}int MinStackPop(MinStack stack){ if(top==0) cout<<"empty"; return stack.data[--stack.top].data;}int MinStackMin(MinStack stack){ if(top==0) cout<<"empty"; return stack.data[stack.top-1].min;}
思路二:借助辅助栈
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
- 微软100题(2) min函数栈
- [微软面试100题] 设计包含min函数的栈
- (微软100题)2.设计包含min 函数的栈。
- 【微软100题】002设计包含 min 函数的栈
- 微软100题-第2题设计包含min函数的栈
- 微软等面试100题筛选答案-2-设计包含min函数的栈
- (微软面试100题)设计包含min 函数的栈
- 微软等面试100题第二题:设计包含min函数的栈
- 包含min函数的栈 【微软面试100题 第二题】
- 【微软100面试题实现】第02题:设计包含min函数的栈
- 微软面试100题之二 设计包含min函数的栈。
- 【微软面试100题】2.设计包含min函数的栈
- 微软面试100题系列-设计包含 min 函数的栈
- 微软100题系列之-----设计包含min函数的栈
- 【从零单排之微软面试100题系列】02之包含 min 函数的栈
- 微软面试100题系列---设计包含min函数的栈
- 微软算法数据结构100题解答 2:设计包含min函数的栈
- 2. 微软面试题:设计包含min函数的栈(栈)
- 基本的CRUD(创建、读取、更新、删除)
- Android命令使用--am
- 解决IllegalBlockSizeException:last block incomplete in decryption异常
- android.util.AndroidRuntimeException: requestFeature() must be called before adding content
- mysql基础知识
- 微软100题(2) min函数栈
- 《Java程序设计》第二次作业:MySQL数据库及Java操作MySQL数据库 之一
- Error: Can't access JTAG chain问题解决方法
- maven+ssh+JPA配置文件
- Numpy常用函数
- Android之boost编译
- sql - w3c_02
- 诸葛 理解产品、交互和运营
- iOS8,UILabel实现圆角