使用 Python 编写程序找出获得食物包的人数

pythonserver side programmingprogramming更新于 2025/11/30 9:48:17

假设在一次会议中,有两种类型的人。第一种人喜欢素食午餐,另一种人喜欢非素食午餐。但是食物包的数量是有限的,如果素食者收到非素食包或反之亦然,他们不会拿走那个包,而是等到他们得到他们喜欢的包。因此,两种不同类型的食物包和人被表示为 0(素食者)和 1(非素食者)。现在我们得到两个数组,一个包含 n 个食物包(分别用 0 和 1 表示),另一个数组包含 m 个人的队列,他们的偏好用 0 和 1 表示。因此,如果一个人没有收到他们喜欢的食物包,他们会重新进入队列末尾并等待他们喜欢的食物包。因此,我们必须找出没有食物包的人数,以便安排他们喜欢的食物包。

因此,如果输入为 people = [0,1,1,0], packets = [0, 1, 0, 0],则输出将为 1。

因此,有两个人喜欢非素食,并且只有一个非素食包。排队中第一个喜欢非素食的人拿到了那个包,另一个人继续等待,因为没有其他非素食包。因此,输出为 1。

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

  • temp_arr := 一个包含值 0 和 0 的新列表

  • 对于 people 中的每个人,执行

    • temp_arr[person] := temp_arr[person] + 1

  • k := 0

  • while 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

相关文章


有用资源