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 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.