Python程序:从不同邮箱中排序重要邮件


假设我们有一系列邮箱。每个邮箱中都包含一个字符串列表,每个字符串要么是“J”(垃圾邮件),要么是“P”(个人邮件),要么是“W”(工作邮件)。我们将按照循环顺序(从第一个邮箱开始)遍历每个邮箱,过滤掉“J”,形成一个单一的列表并返回该列表。

例如,如果输入为 mailboxes = [["W", "P"],["J", "P", "J"],["W"]],则输出将为 ["W", "W", "P", "P"]。因为按照顺序且不进行过滤,我们有 W -> J -> W -> P -> P -> J,现在由于我们过滤掉了垃圾邮件,所以我们得到 W -> W -> P -> P。

为了解决这个问题,我们将遵循以下步骤:

  • n_mailboxes := mailboxes 的大小
  • result := 一个新的列表
  • counts := 一个大小为 n_mailboxes 的列表,然后填充为 0
  • more := True
  • 当 more 不为零时,执行以下操作:
    • more := False
    • 对于 i 从 0 到 n_mailboxes 的范围,执行以下操作:
      • index := counts[i],mailbox := mailboxes[i]
      • 如果 index < mailbox 的大小,则:
        • more := True
        • counts[i] := counts[i] + 1
        • mail := mailbox[index]
        • 如果 mail 不等于 "J",则:
          • 将 mail 插入到 result 的末尾
  • 返回 result

让我们看一下下面的实现来更好地理解:

示例

 在线演示

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']

更新于: 2020年10月5日

346 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告