สมมติว่าในการประชุมมีคนสองประเภท คนประเภทแรกชอบรับประทานอาหารกลางวันแบบมังสวิรัติ และอีกประเภทหนึ่งชอบรับประทานอาหารกลางวันที่ไม่ใช่มังสวิรัติ แต่มีแพ็คเก็ตจำนวนจำกัด และหากผู้ทานมังสวิรัติได้รับแพ็คเก็ตที่ไม่ใช่มังสวิรัติหรือในทางกลับกัน พวกเขาจะไม่เอาแพ็กเก็ตนั้นและรอจนกว่าจะได้แพ็กเก็ตที่ต้องการ ดังนั้น แพ็กเก็ตและผู้คนสองประเภทที่แตกต่างกันจึงถูกระบุว่าเป็น 0 สำหรับผู้ทานมังสวิรัติ และ 1 สำหรับผู้ที่ไม่ใช่มังสวิรัติ ตอนนี้เราได้รับอาร์เรย์สองชุด โดยชุดหนึ่งประกอบด้วยจำนวน n ของแพ็คเก็ตอาหารแสดงด้วย 0 และ 1 และอีกอาร์เรย์หนึ่งมีคิวจำนวน m คน และการตั้งค่าของพวกเขาจะแสดงด้วย 0 และ 1 ดังนั้นหากบุคคลหนึ่งไม่ได้รับ แพ็กเก็ตที่ต้องการ พวกเขากลับเข้าคิวอีกครั้งในตอนท้ายและรอแพ็กเก็ตที่ต้องการ ดังนั้น เราต้องค้นหาจำนวนคนที่ไม่มีถุงอาหารเพื่อที่เราจะได้จัดชุดที่ต้องการได้
ดังนั้น หากอินพุตเป็นเหมือนคน =[0,1,1,0] แพ็กเก็ต =[0, 1, 0, 0] ผลลัพธ์จะเป็น 1
ดังนั้น คนสองคนจึงชอบอาหารที่ไม่ใช่ผัก และมีเพียงห่อเดียวที่ไม่ใช่ผัก คนแรกในแถวที่ไม่ต้องการผักจะได้รับแพ็คเก็ตนั้นและอีกคนรอเพราะไม่มีแพ็คเก็ตอื่นที่ไม่ใช่ผัก ดังนั้นผลลัพธ์คือ 1
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
temp_arr :=รายการใหม่ที่มีค่า 0 และ 0
-
สำหรับแต่ละคนในคนทำ
-
temp_arr[บุคคล] :=temp_arr[บุคคล] + 1
-
-
k :=0
-
ในขณะที่ k <ขนาดของแพ็กเก็ต ทำ
-
ถ้า temp_arr[packets[k]]>0 แล้ว
-
temp_arr[packets[k]] :=temp_arr[packets[k]] - 1
-
-
มิฉะนั้น
-
ออกจากวง
-
-
k :=k + 1
-
-
ขนาดส่งคืนของแพ็กเก็ต - k
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(people, packets): temp_arr = [0,0] for person in people: temp_arr[person] += 1 k = 0 while k < len(packets): if temp_arr[packets[k]]>0: temp_arr[packets[k]]-=1 else: break k += 1 return len(packets) - k print(solve([0,1,1,0], [0, 1, 0, 0]))
อินพุต
[0,1,1,0], [0, 1, 0, 0]
ผลลัพธ์
1