155.min-stack

155. Min Stack

今天遇到一个不一样的 leetcode

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

push(x) -- Push element x onto stack.
pop() -- Removes the element on top of the stack.
top() -- Get the top element.
getMin() -- Retrieve the minimum element in the stack.
Example:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> Returns -3.
minStack.pop();
minStack.top();      --> Returns 0.
minStack.getMin();   --> Returns -2.

这个题有一个关键的点: 当前入栈的元素和当前的极值的关系需要用栈来存储。用一个变量可以存储极值,那么栈顶就可以用来存储差值。

两个关键的信息存储的点:

  • 最小值亦是
  • 堆顶元素

我们来看一个例子:

push: 1 3 0 1 8

minstack pushstack pop
11 - 1 = 0-
-3 - min = 2-
-0 - min = -1-
01 - min = 1-
-8 - min = 8-

pop

minstack pushstack pop(from bottom to top)min(from bottom to top)
11 - 1 = 00 + min = 1-
-3 - min = 22 + min = 3-
-0 - min = -1-1 < 0, minmin - (0 - pre_min) = 0 - ( 0 - 1) = 1
01 - min = 11 + min = 1-
-8 - min = 88 + min = 80

为什么再次遇见更小的值的时候,不能存储 0 到栈顶来表示?

  1. cur_min - cur_min 不能记录 pre_min 的值
  2. 没有符号变化,就无法判断 cur_min 是否变更
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值