在Python中检查我们是否可以在最喜爱的日子享用最喜爱的糖果的程序
假设我们有一个名为candiesCount的正数值数组,其中candiesCount[i]表示我们拥有第i种糖果的数量。我们还有另一个名为queries的数组,其中queries[i]有三个参数[favoriteType_i,favoriteDay_i,dailyCap_i]。我们有一些规则:
- 我们从第0天开始吃糖果。
-
我们不能吃第i种糖果,除非我们吃过了所有前面的(i-1)种糖果。
-
我们必须每天至少吃一块糖果,直到我们把它们吃完为止。
我们必须遵守这些规则,为每个查询结果构建一个布尔值数组,第i个条目为true,如果我们可以在最喜欢的日子(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型糖果,我们将会在第2天吃一种0型糖果。
-
我们每天最多可以吃4块糖果。如果我们每天吃4块糖果,我们将在第0天吃掉4块0型糖果和4块0型和1型糖果,在第1天吃掉4块1型糖果和4块2型糖果,因此我们不能在第2天吃第4种糖果。
-
我们每天只能吃1块糖果,在第13天我们将吃掉第2种类型的糖果。
为了解决这个问题,我们将采取以下步骤:
- sumcandy:带有一个元素candiesCount[0]的列表。
-
index:1
-
当index < candiesCount长度时,执行以下操作:
- 将(sumcandy[index-1] + candiesCount[index])插入到sumcandy的末尾。
-
index := index + 1
-
在sumcandy的末尾插入0
-
res:一个新列表
-
对于each in queries,执行以下操作:
- typ:each[0]
-
day:each[1]
-
cap:each[2]
-
如果day+1 > sumcandy[typ]或(day+1)*cap <= sumcandy[typ-1],则插入False到res的末尾
-
否则,插入True到res的末尾
-
返回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]