Giả sử chúng ta có một danh sách các hộp thư. Ở đây trong mỗi hộp thư, một danh sách các chuỗi được đưa ra, ở đây mỗi chuỗi là "J" cho rác, "P" cho cá nhân, "W" cho Công việc. Chúng tôi sẽ đi qua từng hộp thư theo thứ tự vòng tròn bắt đầu từ hộp thư đầu tiên, lọc ra J, để tạo thành một danh sách duy nhất và trả lại danh sách.
Vì vậy, nếu đầu vào giống như mailboxes =[["W", "P"], ["J", "P", "J"], ["W"]], thì đầu ra sẽ là ["W" , "W", "P", "P"], theo thứ tự và không có lọc, chúng ta có W -> J -> W -> P -> P -> J, bây giờ vì chúng ta lọc ra rác, chúng ta nhận được W -> W -> P -> P.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- n_mailboxes:=kích thước của các hộp thư
- kết quả:=một danh sách mới
- counts:=danh sách kích thước n_mailboxes, sau đó điền 0
- thêm:=True
- trong khi nhiều hơn là khác 0, hãy thực hiện
- thêm:=Sai
- đối với tôi trong phạm vi từ 0 đến n_mailboxes, hãy thực hiện
- index:=counts [i], mailbox:=mailboxes [i]
- if index
- thêm:=True
- counts [i]:=counts [i] + 1
- mail:=mailbox [index]
- nếu thư không giống như "J", thì
- chèn thư vào cuối kết quả
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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))
Đầu vào
[["W", "P"],["J", "P", "J"],["W"]]
Đầu ra
['W', 'W', 'P', 'P']