Python程序:检查我们是否可以在我们喜欢的日子吃喜欢的糖果
假设我们有一个包含正值的数组candiesCount,其中candiesCount[i]表示我们拥有的第i种类型的糖果数量。我们还有另一个名为queries的数组,其中queries[i]有三个参数[favoriteType_i, favoriteDay_i, dailyCap_i]。我们有一些规则
我们从第0天开始吃糖果。
除非我们已经吃掉了前i-1种类型的糖果,否则我们不能吃任何第i种类型的糖果。
我们必须每天至少吃一颗糖果,直到我们把它们都吃完。
在遵循这些规则的情况下,我们必须为每个查询结果创建一个布尔值数组,并且第i个条目为真,如果我们可以在第favoriteDay_i天吃第favoriteType_i种类型的糖果,而每天吃的糖果不超过dailyCap_i颗。根据规则2,我们可以在同一天吃不同类型的糖果。
因此,如果输入类似于candiesCount = [7,4,5,3,8],queries = [[0,2,2],[4,2,4],[2,13,100]],则输出将为[true,false,true],因为
如果我们在第0天和第1天分别吃2颗0类型的糖果,我们将在第
我们每天最多可以吃4颗糖果。如果我们每天吃4颗糖果,我们将在第0天吃4颗0类型的糖果,在第1天吃4颗0类型和1类型的糖果。然后在第2天,我们只能吃4颗1类型和2类型的糖果,所以我们不能在第2天吃4类型的糖果。
我们每天可以吃1颗糖果,我们将在第13天吃1颗2类型的糖果。
为了解决这个问题,我们将遵循以下步骤:
sumcandy := 一个包含单个元素candiesCount[0]的列表
index:= 1
当index < candiesCount的大小,执行
在sumcandy的末尾插入(sumcandy[index-1] + candiesCount[index])
index := index + 1
在sumcandy的末尾插入0
res:= 一个新的列表
对于queries中的每个each,执行
typ:= each[0]
day:= each[1]
cap:= each[2]
如果day+1 > sumcandy[typ] 或 (day+1)*cap <= sumcandy[typ-1],则
在res的末尾插入False
否则,
在res的末尾插入True
返回res
示例
让我们看看以下实现以获得更好的理解:
def solve(candiesCount, queries): sumcandy = [candiesCount[0]] index=1 while index < len(candiesCount): sumcandy.append(sumcandy[index-1] + candiesCount[index]) index+=1 sumcandy.append(0) res=[] for each in queries: typ=each[0] day=each[1] cap=each[2] if day+1 > sumcandy[typ] or (day+1)*cap <= sumcandy[typ-1]: res.append(False) else: res.append(True) return res candiesCount = [7,4,5,3,8] queries = [[0,2,2],[4,2,4],[2,13,100]] print(solve(candiesCount, queries))
输入
[7,4,5,3,8], [[0,2,2],[4,2,4],[2,13,100]]
输出
[True, False, True]