【LeetCode】Jianzhi Offer <セカンドスワイプ> (4)

目次

トピック: オファーを指す剣 09. 2 つのスタックを使用してキューを実装する - LeetCode

トピックのインターフェース:

問題解決のアイデア:

コード:

終わりました!

トピック: オファーを指す剣 10 - I. フィボナッチ数列 - LeetCode

トピックのインターフェース:

問題解決のアイデア:

コード:

終わりました!

最後に次のように書きます。


トピック:オファーを指す剣 09. 2 つのスタックを使用してキューを実装する - LeetCode

トピックのインターフェース:

type CQueue struct {

}


func Constructor() CQueue {

}


func (this *CQueue) AppendTail(value int)  {

}


func (this *CQueue) DeleteHead() int {

}


/**
 * Your CQueue object will be instantiated and called as such:
 * obj := Constructor();
 * obj.AppendTail(value);
 * param_2 := obj.DeleteHead();
 */

問題解決のアイデア:

この質問を C++ で書いたところ、比較的シンプルでスムーズでした。STL を使用すると、ライブラリから 2 つのスタックを直接転送し、1 つを inStack として、もう 1 つを OutStack として使用し、OutStack に入れて、内容を削除することができます。アウトスタックの。

しかし、この問題を解決するために golang を使用するようになりました。アイデアは難しくありません。重要なのは、スタック構造をエレガントに実装する方法です。スライス機能は今でも非常に便利ですが、今回は添字なしでスライスを逆順に走査する方法という別の操作を学習したと言えます。

this.outStack = append(this.outStack, this.inStack[len(this.inStack)-1])
this.inStack = this.inStack[:len(this.inStack)-1]

小さくなり続ける + 最後の要素を取り続ける、本当に素晴らしいです。具体的なコードは次のとおりです。 

コード:

type CQueue struct {
    inStack []int
    outStack []int
}


func Constructor() CQueue {
    return CQueue{}
}


func (this *CQueue) AppendTail(value int)  {
    this.inStack = append(this.inStack, value)
}


func (this *CQueue) DeleteHead() int {
    if len(this.outStack) == 0 {
        if len(this.inStack) == 0 {return -1}
        this.in2out()
    }
    value := this.outStack[len(this.outStack)-1]
    this.outStack = this.outStack[:len(this.outStack)-1]
    return value
}

func (this *CQueue) in2out() {
    for len(this.inStack) > 0 {
        this.outStack = append(this.outStack, this.inStack[len(this.inStack)-1])
        this.inStack = this.inStack[:len(this.inStack)-1]
    }
}


/**
 * Your CQueue object will be instantiated and called as such:
 * obj := Constructor();
 * obj.AppendTail(value);
 * param_2 := obj.DeleteHead();
 */

終わりました!

トピック:オファーを指す剣 10 - I. フィボナッチ数列 - LeetCode

トピックのインターフェース:

func fib(n int) int {

}

問題解決のアイデア:

この質問は動的計画法に関する非常に古典的な入門質問です。私はここで直接それを行いました。実際には、空間最適化も実行できますが、それは必要ないと思います。簡単な質問は必要ありませんし、難しい質問は必要ありません正直に言うと、最適化する必要があります。

コード:

func fib(n int) int {
    if n <= 1 {return n}
    dp := make([]int, 101)
    dp[0] = 0
    dp[1] = 1
    for i := 2; i <= 100; i++ {
        dp[i] = (dp[i-1] + dp[i-2]) % (1e9 + 7)
    }
    return dp[n] 
}

終わりました!

最後に次のように書きます。

以上が今回の記事の内容となります、読んでいただきありがとうございます。

何かを得たと感じたら、ブロガーに「いいね! 」を与えることができます。

記事の内容に抜けや間違いがある場合は、ブロガーにプライベートメッセージを送信するか、コメントエリアで指摘してください〜

おすすめ

転載: blog.csdn.net/Locky136/article/details/132618805