説明:
レモネードスタンドでは、各レモネードコスト$5
。
お客様は(で指定された順序で一度に一つのあなたから購入し、注文するキューに立っていますbills
)。
各顧客は、唯一のレモネードを購入し、いずれかで支払うことになる$5
、$10
または$20
法案。ネット取引は、顧客が$ 5支払うことになるように、あなたは、各顧客への正しい変更を提供しなければなりません。
あなたが最初に手に変化がないことに注意してください。
戻るtrue
ならば、あなたは正しい変更をすべてのお客様に提供することができた場合にのみ。
例1:
入力:[5,5,5,10,20]
出力:真の
説明:
最初の3人の顧客から、私たちは順番に3人の$ 5手形を集めます。
第四顧客から、我々は$ 10札を収集し、$ 5お返し。
第五顧客から、我々は$ 10札と$ 5法案を与えます。
すべてのお客様が正しいの変化を持っているので、真の出力を我々 。
例2:
入力:[5,5,10]
出力:真
例3:
入力:[10,10]
出力:偽
例4:
入力:[5,5,10,10,20]
出力:偽の
説明:
最初の2人の顧客から順に、我々は2人の$ 5手形を集めます。
次の順番の2人の顧客のために、私たちは$ 10札を集めると$ 5法案をお返し。
我々は2枚のだけ$ 10札を持っているので、最後の顧客のために、我々は戻って$ 15の変更を与えることはできません。
必ずしもすべてのお客様が正しいの変化を受けているので、答えはfalseです。
注意:
0 <= bills.length <= 10000
bills[i]
いずれかになります5
、10
または20
。
溶液:
クラスソリューション{ パブリック ブール lemonadeChange(INT []紙幣){ スタック <整数> 5 = 新しいスタック<整数> (); スタック <整数> 10 = 新しいスタック<整数> (); スタック <整数> 20 = 新しいスタック<整数> (); 以下のために(int型 i = 0; I <bills.length; iは++ ){ 場合(紙幣[I] == 5 ){ five.push( 5 )。 } そう であれば(紙幣[I] == 10 ){ もし(five.size()<1 ){ 戻り 偽。 } 他{ five.pop()。 ten.push( 10 )。 } } 他{ 場合(five.size()<1 ){ 戻り 偽。 } そう であれば(ten.size()<1 && five.size()<3 ){ 戻り 偽。 } 他{ 場合(ten.size()> = 1){ ten.pop(); twenty.push( 20 )。 five.pop(); } そう であれば(ten.size()<1 ){ five.pop()。 five.pop(); five.pop(); twenty.push( 20 )。 } } } } 戻り 真。 } }