(初級)8.最小棧

來源:互聯網
上載者:User

設計一個支援 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 stackimport (    "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)}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.