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]

更新于: 2021年10月6日

189 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告