2016-04-15 27 views
-3

を機能:https://leetcode.com/problems/min-stack/のJavaスタックは、私がここに光のコーディングの問題を解決しようとしていたDiffrernce

しかし、以下のコードが一致しない理由を私は知らない。

public void pop() { 
    // if (!minStack.isEmpty() && minStack.peek() == stack.peek()){ 
    //  minStack.pop(); 
    // } 
    // stack.pop(); 
    int x = stack.pop(); 
    if (!minStack.isEmpty() && x == minStack.peek()) { 
     minStack.pop(); 
    } 
} 

私がコメントしたコードを使用する場合、それは間違っています。何故ですか?

ありがとうございました!

+0

最初の違いは - もし 'stack'が空で、' minStack'も空であれば?そして、2つのコード*は同じことをはっきりとしません。 –

+0

@JonSkeet 'stack'と' minStack'の両方が空であれば、両方のブロックが 'stack.pop()'を呼び出しません。例外を投げる? –

+0

@DarthAndroid:私は今自分自身を混乱させています...もう一度試してみましょう:) –

答えて

1

プリミティブのスタックがある場合は、==を使用してコンテンツを比較するため、両方とも機能するはずです。

Integerのスタックがあると仮定しています。この場合、==は参照平等をチェックしますが、value equalityをチェックする必要があります。 .equals()を使用すると、問題を解決できるかもしれません。 :)

+0

ありがとう!だから私は参照ではなく値でそれらを比較する必要があります.. – Paul

+0

正確に。私はちょうど2つのスタックの使用に依存しない['この実用的な解決策](https://github.com/dray92/Programming-Questions/blob/master/leetcode/Min_Stack.java)を書きました。私はそれがよりクリーンな選択肢だと思う。 –

+0

あなたの解決策も読んだことがあります。ありがとう! – Paul

関連する問題