NOTE

最小栈

最小栈 的 LeetCode 解题笔记。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 题目描述

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

2. 思路

  1. 思路一
    • 由于栈的先入后出特性,可以额外使用一个最小栈来保存当前数组中最小的元素

3. 实现

type MinStack struct {
    data []int
    min  []int
}


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


func (this *MinStack) Push(val int)  {
    if len(this.data) == 0 {
        this.min = append(this.min, val)
    }else {
        top := this.min[len(this.min)-1]
        if top < val {
            this.min = append(this.min, top)
        }else {
            this.min = append(this.min, val)
        }
    }
    this.data = append(this.data, val)

}


func (this *MinStack) Pop()  {
    if len(this.data) == 0 {
        return
    }
    this.data = this.data[:len(this.data)-1]
    this.min = this.min[:len(this.min)-1]
}


func (this *MinStack) Top() int {
    if len(this.data) == 0{
        return 0
    }
    return this.data[len(this.data)-1]
}


func (this *MinStack) GetMin() int {
    if len(this.min) == 0{
        return 0
    }

    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();
 */

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看