力扣習題 860 檸檬水找零

2022-07-24 21:00:31 字數 1974 閱讀 8456

題目超連結

解題思路:

1.已知關係當前餘額=balance+5,(即每次只能交易一筆,即+5元)

2.已知change=0,則無需找零。

3.已知交易前的餘額小於change,則不能找零。

4.上面3點容易得出。但餘額面值與change零錢的匹配關係是否滿足,則是難點。

故如何該演算法的關係點:計算change與餘額面值的匹配關係。

根據題目已知bills[i] 不是 5 就是 10 或是 20 ,即表明,找零change只有三個值即5,10,15

如果要滿足這三個值的找零,則餘額面值裡面需有對應的面值,否則無法找零

#設餘額的初始值為0

balance=0

balance_list=

for id,item in enumerate(bills):

#當前找零=實際收款-5

change=item-5

#交易前的餘額小於change,則不能找零。

if balance=2:

balance_list.remove(5)

balance_list.remove(5)

continue

else:

return false

elif change==15:

if balance_list.count(5)>=3:

balance_list.remove(5)

balance_list.remove(5)

balance_list.remove(5)

continue

elif 10 in balance_list and 5 in balance_list:

balance_list.remove(10)

balance_list.remove(5)

continue

else:

return false

return true

優化版本: 解題思路 由於找零【5,10,15】,故實質轉換為:記錄5,10的個數,如果有乙個透支了,即說明不能滿足找零def lemonadechange(bills):

#i記錄5出現的次數

#j記錄10出現的次數

#一開始餘額為0,則5和10的面值都沒有

i=j=0

for k in bills:

if k5:i+=1;#無需要找零

elif k10:j+=1;i-=1 #如需找5元,則i-1

else: #k20

if j1:i-=3 #找零15,則一次10,再取一次1

elif j==0:i-=1 #找零15,則取3次5

#如果i和j出現負數,則代表不能取

if i<0 or j<0:

return false

return true

`我覺得**有點缺陷,如果是20塊錢,我們應該優先考慮找零一張10塊的 和一張5塊的,而不是先找3張5塊的】 因為5塊的比10塊錢要更加靈活,如果你全把5塊換光了,就不好找後面的零錢了

力扣 860 檸檬水找零

在檸檬水攤上,每一杯檸檬水的售價為 5 美元。顧客排隊購買你的產品,按賬單 bills 支付的順序 一次購買一杯。每位顧客只買一杯檸檬水,然後向你付 5 美元 10 美元或 20 美元。你必須給每個顧客正確找零,也就是說淨交易是每位顧客向你支付 5 美元。注意,一開始你手頭沒有任何零錢。如果你能給每...

檸檬水找零 860

在檸檬水攤上,每一杯檸檬水的售價為 5 美元。顧客排隊購買你的產品,按賬單 bills 支付的順序 一次購買一杯。每位顧客只買一杯檸檬水,然後向你付 5 美元 10 美元或 20 美元。你必須給每個顧客正確找零,也就是說淨交易是每位顧客向你支付 5 美元。注意,一開始你手頭沒有任何零錢。如果你能給每...

860 檸檬水找零

在檸檬水攤上,每一杯檸檬水的售價為 5 美元。顧客排隊購買你的產品,按賬單 bills 支付的順序 一次購買一杯。每位顧客只買一杯檸檬水,然後向你付 5 美元 10 美元或 20 美元。你必須給每個顧客正確找零,也就是說淨交易是每位顧客向你支付 5 美元。注意,一開始你手頭沒有任何零錢。如果你能給每...