【LeetCode】貪心算法--分發糖果(135)

今日題目算法

老師想給孩子們分發糖果,有N個孩子站成了一條直線,老師會根據每一個孩子的表現,預先給他們評分。
你須要按照如下要求,幫助老師給這些孩子分發糖果:
每一個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須得到更多的糖果。那麼這樣下來,老師至少須要準備多少顆糖果呢?數組

示例 1:
輸入: [1,0,2]
輸出: 5
解釋: 你能夠分別給這三個孩子分發 二、一、2 顆糖果。
示例 2:
輸入: [1,2,2]
輸出: 4
解釋: 你能夠分別給這三個孩子分發 一、二、1 顆糖果。第三個孩子只獲得 1 顆糖果,這已知足上述兩個條件。3d

題目分析code

對於這個問題,主要的條件是要相鄰孩子,得分高的拿的糖果要多(不包括相等得分),還有就是每一個人最少都要有一個。
解決這個問題咱們仍是採用貪心算法,首先初始化每一個人分配的糖果數量都是1,而後這個算法須要遍歷兩遍,第一遍從左往右遍歷,若是當前孩子的分數大於前一個孩子的分數,則當前孩子獲得的糖果在前一個孩子的基礎上加1;而後,第二遍從右往左遍歷,若是當前孩子的分數大於他右邊孩子的分數,而且他的糖果不比他右邊孩子多,則糖果數在他基礎上加1;最後,將全部孩子的糖果數相加便可。
第二次遍歷是爲了處理數組中降序和有出現相鄰孩子分數相同的狀況。token

代碼實現get

class Solution:io

def candy(self, ratings):
   """
   :type ratings: List[int]
   :rtype: int
    """
   num = [1]*len(ratings)
   for i in range(0,len(ratings)-1):
   if ratings[i+1] > ratings[i]:
       num[i+1] = num[i] + 1     
   for i in range(len(ratings)-1,0,-1):
       if ratings[i] < ratings[i-1]:
           num[i-1] = max(num[i]+1,num[i-1])

   return sum(num)

寫在最後class

寒假已經跟一個小夥伴商量好一塊兒刷題,感興趣的小夥伴也能夠加入咱們,但願你們天天能夠交流刷題的心得,爲了保證質量我會控制人數,大約在12人左右。基礎

推薦閱讀:
Python騷操做 | 用Python來P圖 List

相關文章
相關標籤/搜索