สมมติว่ามีร้านขายน้ำมะนาว น้ำมะนาวแต่ละขวดมีราคา 5 เหรียญ ตอนนี้ลูกค้าเข้าคิวซื้อของจากร้านแล้วสั่งทีละอย่าง
ลูกค้าแต่ละรายสามารถซื้อน้ำมะนาวได้เพียงชิ้นเดียวและชำระเงินด้วยบิล $5, $10 หรือ $20 เราต้องจัดเตรียมการเปลี่ยนแปลงที่ถูกต้องให้กับลูกค้าแต่ละราย เพื่อให้ธุรกรรมสุทธิคือลูกค้าจ่ายเงิน $5 และในตอนแรก เราไม่มีการเปลี่ยนแปลงใดๆ ในมือ
เราต้องตรวจสอบว่าเราสามารถให้การเปลี่ยนแปลงที่ถูกต้องแก่ลูกค้าทุกรายหรือไม่
ดังนั้น หากอินพุตเป็น [5,5,5,10,20] ผลลัพธ์จะเป็น True เนื่องจากลูกค้า 3 คนแรก เราจะได้รับตั๋วเงิน $5 สามใบตามลำดับ จากอันที่สี่ เรารวบรวมบิล 10 ดอลลาร์ และคืนเงิน 5 ดอลลาร์ หลังจากนั้น จากลูกค้าคนที่ห้า เราให้บิล $10 และ $5 บิล เมื่อลูกค้าทุกคนได้รับการแก้ไข เราให้ผลลัพธ์เป็น true
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- n5 :=0, n10 :=0, n20 :=0
- สำหรับแต่ละ i ในตั๋วเงิน ทำ
- ถ้าฉันเหมือนกับ 5 แล้ว
- n5 :=n5 + 1
- มิฉะนั้น เมื่อ i เท่ากับ 10 แล้ว
- n10 :=n10 + 1
- มิฉะนั้น n20 :=n20 + 1
- ถ้าขนาดของบิล> 0 และ n5 เท่ากับ 0 แล้ว
- คืนค่าเท็จ
- ถ้าฉันเหมือนกับ 20 และ n10> 0 และ n5> 0 แล้ว
- n10 :=n10 - 1
- n5 :=n5 - 1
- มิฉะนั้น เมื่อ i เท่ากับ 20 และ n10 เหมือนกับ 0 และ n5 <3 แล้ว
- คืนค่าเท็จ
- มิฉะนั้น เมื่อ i เท่ากับ 20 และ n10 เหมือนกับ 0 และ n5>=3 แล้ว
- n5 :=n5 -3
- ถ้าฉันเหมือนกับ 10 และ n5> 0 แล้ว
- n5 :=n5 - 1
- มิฉะนั้น เมื่อฉันเหมือนกับ 10 และ n5 เหมือนกับ 0 แล้ว
- คืนค่าเท็จ
- ถ้าฉันเหมือนกับ 5 แล้ว
- คืนค่า True
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def lemonadeChange(self, bills): n5 = 0 n10 = 0 n20 = 0 for i in bills: if i == 5: n5 += 1 elif i == 10: n10 += 1 else: n20 += 1 if len(bills) > 0 and n5 == 0: return(False) if i == 20 and n10 > 0 and n5 > 0: n10 -= 1 n5 -= 1 elif i == 20 and n10 == 0 and n5 < 3: return(False) elif i == 20 and n10 == 0 and n5 >= 3: n5 = n5 -3 if i == 10 and n5 > 0: n5 -= 1 elif i == 10 and n5 == 0: return (False) return(True) ob = Solution() print(ob.lemonadeChange([5,5,5,10,20]))
อินพุต
[5,5,5,10,20]
ผลลัพธ์
True