用 Python 编写程序检查我们是否可以在最喜欢的一天吃最喜欢的糖果
假设我们有一个正值数组 candiesCount,其中 candiesCount[i] 表示我们拥有的第 i 种类型的糖果数量。我们还有另一个名为 queries 的数组,其中 queries[i] 有三个参数 [favoriteType_i、favoriteDay_i、dailyCap_i]。我们有一些规则:
我们从第 0 天开始吃糖果。
除非我们已经吃完了前 i-1 种类型的所有糖果,否则我们不能吃任何类型 i 的糖果。
我们必须每天至少吃一颗糖果,直到吃完所有糖果为止。
遵循这些规则,我们必须为每个查询结果创建一个布尔值数组,如果我们可以在 favoriteDay_i 天吃掉类型为 favoriteType_i 的糖果,并且每天吃的糖果不超过 dailyCap_i 颗,则第 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 型糖果,我们将在第 1 天吃一颗 0 型糖果
我们每天最多可以吃 4 颗糖果。如果我们每天吃 4 颗糖果,那么第 0 天我们会吃 4 颗 0 型糖果,第 1 天我们会吃 4 颗 0 型、1 型糖果。那么第 2 天我们只能吃 4 颗 1 型、2 型糖果,所以第 2 天我们不能吃 4 型糖果。
我们每天可以吃 1 颗糖果,第 13 天我们会吃 2 型糖果。
为了解决这个问题,我们将遵循以下步骤 −
sumcandy := 具有单个元素 candiesCount[0] 的列表
index:= 1
while index < candiesCount 的大小,执行
在 sumcandy 末尾插入 (sumcandy[index-1] + candiesCount[index])
index := index + 1
在 sumcandy 末尾插入 0
res:= a new list
对于查询中的每个,执行
typ:= each[0]
day:= each[1]
cap:= each[2]
if 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]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

