1, 题目
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 0.minStack.getMin(); --> 返回 -2.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2, 算法
class MinStack() {/** initialize your data structure here. */val buffer = scala.collection.mutable.ArrayBuffer[Int]()var value = Int.MaxValuedef push(x: Int): Unit = {value = value.min(x)buffer.append(x)}def pop(): Unit = {if (buffer.nonEmpty) {buffer.remove(buffer.length - 1)if (buffer.nonEmpty) {value = buffer.min} else {value = Int.MaxValue}} else {throw new NoSuchElementException()}}def top(): Int = {buffer.last}def getMin(): Int = {if (buffer.nonEmpty) {value} else {throw new NoSuchElementException()}}}
class MinStack:def __init__(self):"""initialize your data structure here."""self.buffer = []self.value = Nonedef push(self, x: int) -> None:self.buffer.append(x)if self.value is not None:self.value = min(self.value, x)else:self.value = xdef pop(self) -> None:if self.buffer:x = self.buffer.pop()if self.buffer:self.value = min(self.buffer)else:self.value = Nonereturn xdef top(self) -> int:if self.buffer:return self.buffer[-1]def getMin(self) -> int:if self.value is not None:return self.value
