[Golang] LeetCode- 30-顔の質問オファー安全性を証明備えるMIN関数スタック

タイトル

スタックデータ構造定義は、スタックのこのタイプは、スタック内のMIN関数最小要素、コール分、プッシュとポップ時間複雑度はO(1)であることができる器具。

例:

分のありがとう分のおかげ=新しい分おかげで();
minStack.push(-2)。
minStack.push(0)。
minStack.push(-3)。
minStack.min(); - >返回-3。
minStack.pop();
minStack.top(); - >返回0
minStack.min()。- >返回-2。

注:コールの合計数は、各関数が20000回を超えていません

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof


問題解決のためのアイデア

暴力:分は、その後の最小値を見つけるために、コールスタックを横断し、ここでは、対象の要件ではなく、デモを満たしていません。

スタック

  • 特徴:最後のアウト

  • この方法のタイトルを実装する必要があります

    • プッシュ():アレイの端部に1つ以上の金属元素(スタックにプッシュ)を追加します
    • トップ():最後の要素(トップ要素)の配列を返しますではなく、スタック内の
    • ポップ():配列(スタックから最上位要素)で最後の要素を削除します

問題解決

スタックは、最小機能が含まれ、実際には、最小スタックが返される呼び出し、より多くの方法の分スタックを超えています。

それは小さい値に補助記憶スタックを追加するだけで、コール分()補助スタックを返す最小スタックトップです。


コード

- 実行時間:24ミリ - 消費メモリ:8.5メガバイト

type MinStack struct {
    nums []int 	//储存栈
    min []int 	//辅助储存栈,存储最小值
}

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

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


func (this *MinStack) Pop()  {
    this.nums=this.nums[:len(this.nums)-1]
    this.min=this.min[:len(this.min)-1]
}


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


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

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

LeetCodeでこの質問、私は、説明を提出しなければならないビューへようこそ。ニックネーム:さくら。

发布了17 篇原创文章 · 获赞 0 · 访问量 168

おすすめ

転載: blog.csdn.net/qq_19841021/article/details/104351345