最小栈

2021/03/19 数据结构

最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。

示例:

输入: [“MinStack”,”push”,”push”,”push”,”getMin”,”pop”,”top”,”getMin”] [[],[-2],[0],[-3],[],[],[],[]]

输出: [null,null,null,null,-3,null,0,-2]

解释: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); –> 返回 -3. minStack.pop(); minStack.top(); –> 返回 0. minStack.getMin(); –> 返回 -2.

提示:

pop、top 和 getMin 操作总是在 非空栈 上调用。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/min-stack 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

type MinStack struct {
    Stack []int
    Min   []int
}


/** initialize your data structure here. */
func Constructor() MinStack {
    return MinStack{
            Stack: []int{},
            Min:   []int{},
    }
}


func (this *MinStack) Push(val int)  {
    this.Stack = append(this.Stack,val)
    if len(this.Min) == 0 || this.Min[len(this.Min)-1] >= val {
        this.Min = append(this.Min,val)
    }
}


func (this *MinStack) Pop()  {
    if this.Stack[len(this.Stack)-1] == this.Min[len(this.Min)-1] {
        this.Min = this.Min[0:len(this.Min)-1]
    }
    this.Stack = this.Stack[0:len(this.Stack)-1]
}


func (this *MinStack) Top() int {
    return this.Stack[len(this.Stack)-1]
}


func (this *MinStack) GetMin() int {
    return this.Min[len(this.Min)-1]
}


/**
 * Your MinStack object will be instantiated and called as such:
 * obj := Constructor();
 * obj.Push(val);
 * obj.Pop();
 * param_3 := obj.Top();
 * param_4 := obj.GetMin();
 */

Search

    Table of Contents