js 包含min函数的栈_算法3-设计包含min函数的栈

题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。

要求函数min、push以及pop的时间复杂度都是O(1)。

思路:使用一个辅助栈来保存最小元素,这个解法简单不失优雅。设该辅助栈名字为minimum stack,其栈顶元素为当前栈中的最小元素。

要获取当前栈中最小元素,只需要返回minimum stack的栈顶元素即可。

每次执行push操作,检查push的元素是否小于或等于minimum stack栈顶元素。如果是,则也push该元素到minimum stack中。

当执行pop操作的时候,检查pop的元素是否与当前最小值相等。如果相同,则需要将改元素从minimum stack中pop出去。

#include

#include 

#include 

using namespace std ;

struct StackGetMin {

stack elements;

stack minStack;

void push(int x) {

elements.push(x);

if (minStack.empty() || x <= minStack.top()) //push的元素小于当前minStack的最小元素,则push到minStack中

minStack.push(x);

}

bool pop() {

if (elements.empty()) return false;

if (elements.top() == minStack.top()) //如果原始栈栈顶元素与minStack栈顶元素相同,则将该元素也从minStack中pop出去。

minStack.pop();

elements.pop();

return true;

}

bool getMin(int &min) {

if (minStack.empty()) {

return false;

} else {

min = minStack.top();

return true;

}

}

};

int main()

{

StackGetMin stackMin;

stackMin.push(2);

stackMin.push(6);

stackMin.push(4);

stackMin.push(1);

stackMin.push(5);

int min =0;

stackMin.getMin(min );

cout<

getchar();

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值