美文网首页
(初级)8.最小栈

(初级)8.最小栈

作者: one_zheng | 来源:发表于2018-08-12 17:18 被阅读116次

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

使用两个栈来实现,一个栈来按顺序存储push进来的数据,另一个用来存出现过的最小值。

golang代码如下:

package stack

import (
    "container/list"
)

type Stack struct {
    list *list.List
}

func NewStack() *Stack {
    list := list.New()
    return &Stack{list}
}

func (stack *Stack) Push(value interface{}) {
    stack.list.PushBack(value)
}

func (stack *Stack) Pop() interface{} {
    e := stack.list.Back()
    if e != nil {
        stack.list.Remove(e)
        return e.Value
    }
    return nil
}

func (stack *Stack) Peak() interface{} {
    e := stack.list.Back()
    if e != nil {
        return e.Value
    }

    return nil
}

func (stack *Stack) Len() int {
    return stack.list.Len()
}

func (stack *Stack) Empty() bool {
    return stack.list.Len() == 0
}

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


type MinStack struct {
    s1, s2 *Stack
}

/** initialize your data structure here. */
func Constructor() MinStack {
    return MinStack{
        s1: NewStack(),
        s2: NewStack(),
    }
}

func (this *MinStack) Push(x int) {
    this.s1.Push(x)
    if this.s2.Empty() || x <= this.s2.Peak().(int) {
        this.s2.Push(x)
    }
}

func (this *MinStack) Pop() {
    x := this.s1.Pop()
    if x == this.s2.Peak().(int) {
        this.s2.Pop()
    }

}

func (this *MinStack) Top() int {
    return this.s1.Peak().(int)

}

func (this *MinStack) GetMin() int {
    return this.s2.Peak().(int)

}


相关文章

  • (初级)8.最小栈

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

  • 初级算法-设计问题-最小栈

    设计一个支持push、pop、top 操作,并能在常数时间内检索到最小元素的栈. push(x) ------ 将...

  • LeetCode初级算法--设计问题02:最小栈

    LeetCode初级算法--设计问题02:最小栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小...

  • LeetCode-155-最小栈

    LeetCode-155-最小栈 155. 最小栈[https://leetcode-cn.com/problem...

  • 最小栈

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

  • 最小栈

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

  • 最小栈

    https://leetcode-cn.com/explore/interview/card/bytedance/...

  • 最小栈

    题目描述 https://leetcode-cn.com/problems/min-stack/ 解 思路 用一个...

  • 最小栈

    题目 难度级别:简单 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 pu...

  • 最小栈

    题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) --...

网友评论

      本文标题:(初级)8.最小栈

      本文链接:https://www.haomeiwen.com/subject/mznsbftx.html