สมมติว่าเรามีอาร์เรย์ที่เรียกว่าบันทึกย่อแสดงถึงธนบัตรรูปีที่แตกต่างกันที่ลูกค้าถืออยู่ในคิว พวกเขากำลังรอซื้อตั๋วมูลค่า 50 รูปี โดยหมายเหตุที่เป็นไปได้คือ [50, 100 และ 200] เราต้องตรวจสอบว่าเราสามารถขายตั๋วให้ประชาชนเป็นลำดับหรือไม่ อันดับแรก เรามี 0 รูปีในมือ
ดังนั้น หากอินพุตเหมือนกับบันทึกย่อ =[50, 50, 100, 100] ผลลัพธ์จะเป็น True สำหรับสองรายการแรก เราไม่จำเป็นต้องส่งคืนสิ่งใดๆ แต่ตอนนี้ เรามีบันทึกย่อ Rs 50 สองรายการ ดังนั้นสำหรับสองใบสุดท้าย เราสามารถส่งคืนธนบัตร 50 รูปีและขายตั๋วทั้งหมดตามลำดับ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ความถี่ :=แผนที่ว่าง
- ผม :=0
- ในขณะที่ฉัน <ขนาดของโน้ต ทำ
- ถ้า note[i] เท่ากับ 50 แล้ว
- ความถี่[50] :=ความถี่[50] + 1
- มิฉะนั้น เมื่อโน้ต[i] เท่ากับ 100 แล้ว
- ความถี่[100] :=ความถี่[100] + 1
- ถ้า freq[50] เป็น 0 แล้ว
- ออกมาจากลูป
- ความถี่[50] :=ความถี่[50] - 1
- มิฉะนั้น
- ถ้า freq[100]> 0 และ freq[50]> 0 แล้ว
- ความถี่[100] :=ความถี่[100] - 1
- ความถี่[50] :=ความถี่[50] - 1
- มิฉะนั้น เมื่อ freq[50]>=3 แล้ว
- ความถี่[50] :=ความถี่[50] - 3
- มิฉะนั้น
- ออกมาจากลูป
- ถ้า freq[100]> 0 และ freq[50]> 0 แล้ว
- ผม :=ผม + 1
- ถ้า note[i] เท่ากับ 50 แล้ว
- ถ้าฉันมีขนาดเท่ากับโน้ตแล้ว
- คืนค่า True
- คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from collections import defaultdict def solve(notes): freq = defaultdict(int) i = 0 while i < len(notes): if notes[i] == 50: freq[50] += 1 elif notes[i] == 100: freq[100] += 1 if freq[50] == 0: break freq[50] -= 1 else: if freq[100] > 0 and freq[50] > 0: freq[100] -= 1 freq[50] -= 1 elif freq[50] >= 3: freq[50] -= 3 else: break i += 1 if i == len(notes): return True return False notes = [50, 50, 100, 100] print(solve(notes))
อินพุต
[50, 50, 100, 100]
ผลลัพธ์
True