สมมติว่าเรามีรายชื่อกล่องจดหมาย ที่นี่ในแต่ละเมลบ็อกซ์ รายการสตริงจะได้รับ โดยแต่ละสตริงคือ "J" สำหรับขยะ "P" สำหรับส่วนบุคคล "W" สำหรับที่ทำงาน เราจะตรวจสอบกล่องจดหมายแต่ละกล่องโดยเรียงลำดับแบบวนซ้ำโดยเริ่มจากกล่องจดหมายแรก กรอง J เพื่อสร้างรายการเดียวและส่งคืนรายการ
ดังนั้น ถ้าอินพุตเป็นเหมือนเมลบ็อกซ์ =[["W", "P"],["J", "P", "J"],["W"]] เอาต์พุตจะเป็น ["W" , "W", "P", "P"] ตามคำสั่งและไม่มีการกรอง เรามี W -> J -> W -> P -> P -> J ตอนนี้เนื่องจากเรากรองขยะออก เราจึงได้ W -> W -> P -> P.
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- n_mailboxes :=ขนาดของกล่องจดหมาย
- ผลลัพธ์ :=รายการใหม่
- นับ :=รายการขนาด n_mailboxes จากนั้นเติม 0
- เพิ่มเติม :=จริง
- ยิ่งไม่เป็นศูนย์ ก็ทำ
- เพิ่มเติม :=เท็จ
- สำหรับฉันในช่วง 0 ถึง n_mailboxes ทำ
- ดัชนี :=นับ[i], กล่องจดหมาย :=กล่องจดหมาย[i]
- ถ้าดัชนี <ขนาดของเมลบ็อกซ์แล้ว
- เพิ่มเติม :=จริง
- นับ[i] :=นับ[i] + 1
- เมล :=กล่องจดหมาย[ดัชนี]
- ถ้าเมลไม่เหมือนกับ "J" งั้น
- แทรกเมลที่ส่วนท้ายของผลลัพธ์
- ผลตอบแทน
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, mailboxes): n_mailboxes = len(mailboxes) result = [] counts = [0]*n_mailboxes more = True while more: more = False for i in range(n_mailboxes): index, mailbox = counts[i], mailboxes[i] if index < len(mailbox): more = True counts[i] += 1 mail = mailbox[index] if mail != "J": result.append(mail) return result ob = Solution() mailboxes = [["W", "P"],["J", "P", "J"],["W"]] print(ob.solve(mailboxes))
อินพุต
[["W", "P"],["J", "P", "J"],["W"]]
ผลลัพธ์
['W', 'W', 'P', 'P']