Leetcode 155. 最小栈 简单
题目:
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。
思路1:
用一个额外的栈保存每次push时的最小值。
如果val小于min,则将val放入最小栈,否则放入min
class MinStack { public: MinStack() { stkmin.push(INT_MAX); } void push(int val) { stk.push(val); if(val<stkmin.top()){ stkmin.push(val); }else{ stkmin.push(stkmin.top()); } } void pop() { stk.pop(); stkmin.pop(); } int top() { return stk.top(); } int getMin() { return stkmin.top(); } stack<int> stk; stack<int> stkmin; };
思路2:
不使用额外空间的方法,就是当min_val需要更新(也就是val<=min_val时),先将当前的min_val放入栈中,更新min_val=val,然后将val放入栈
pop时比较top与min_val,如果相等,意味着min_val需要更新
class MinStack { public: MinStack() { min_val=INT_MAX; } void push(int val) { if(val<=min_val){ stk.push(min_val); min_val=val; } stk.push(val); } void pop() { int num=stk.top(); stk.pop(); if(num==min_val){ min_val=stk.top(); stk.pop(); } } int top() { return stk.top(); } int getMin() { return min_val; } int min_val; stack<int> stk; };
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=