使用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
广告