LeetCode-最小栈

xx19941215 · · 1048 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

设计一个支持 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.

解法:

大概思路是使用维护两个栈,一个保存数据,一个保存最小值的索引。

type MinStack struct {
    data []interface{}
    minIndex []int
}


/** initialize your data structure here. */
func Constructor() MinStack {
    var instance MinStack
    return instance
}


func (this *MinStack) Push(x int)  {
    this.data = append(this.data, x)
    if len(this.minIndex) == 0 {
        this.minIndex = append(this.minIndex, 0)
    } else {
        //当前最小值比新值大
        if this.data[this.minIndex[len(this.minIndex) - 1]].(int) > x {
            //当前最小值索引压入minIndex
            this.minIndex = append(this.minIndex, len(this.data) - 1)
        } 
    }
}


func (this *MinStack) Pop()  {
    length := len(this.data)
    currentMinIndex := length - 1
    
    if currentMinIndex == this.minIndex[len(this.minIndex) - 1] {
        this.minIndex = this.minIndex[:len(this.minIndex) - 1]
    }
    
    this.data = this.data[:len(this.data) - 1]
}


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


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


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

参考


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:xx19941215

查看原文:LeetCode-最小栈

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1048 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传