使用Python查找获得食物包的人数的程序


假设在一个会议上,有两种人。第一种人喜欢素食午餐,另一种人喜欢非素食午餐。但是食物包的数量有限,如果素食者收到非素食包,反之亦然,他们将不会接受该包,而会等到获得他们喜欢的包为止。因此,两种不同的食物包和人都用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

  • 当k < packets的大小,执行以下操作:

    • 如果temp_arr[packets[k]] > 0,则

      • temp_arr[packets[k]] := temp_arr[packets[k]] - 1

    • 否则,

      • 退出循环

    • k := k + 1

  • 返回packets的大小 - 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

更新于:2021年10月5日

浏览量:352

开启你的职业生涯

完成课程获得认证

开始
广告