貪心 LeetCode135 分發糖果

2021-10-08 09:06:38 字數 1407 閱讀 8979

老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。

按照以下要求,幫助老師給這些孩子分發糖果,老師至少需要準備多少顆糖果呢?

輸入: [1,0,2]

輸出: 5

解釋: 你可以分別給這三個孩子分發 2、1、2 顆糖果。

輸入: [1,2,2]

輸出: 4

解釋: 你可以分別給這三個孩子分發 1、2、1 顆糖果。

第三個孩子只得到 1 顆糖果,這已滿足上述兩個條件。

兩邊遍歷

取以上2輪遍歷leftright對應學生糖果數的最大值,這樣則同時滿足左規則和右規則,即得到每個同學的最少糖果數量。

# 左規則:從左至右遍歷

for i in range(1, len(ratings)):

if ratings[i] > ratings[i - 1]:

left[i] = left[i - 1] + 1

count = left[-1]

# print('left:', left)

# print('count:', count)

# 右規則:從右至左遍歷

for i in range(len(ratings) - 2, -1, -1):

if ratings[i] > ratings[i + 1]:

right[i] = right[i + 1] + 1

count += max(left[i], right[i]) # 累加,取2輪遍歷最大值

return count

r = [5, 7, 8, 3, 4, 2, 1]

s = solution()

print(s.candy(r))

solution/candy-cong-zuo-zhi-you-cong-you-zhi-zuo-qu-zui-da-/

LeetCode 135 分發糖果

老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 輸入 1,0,2 輸出 ...

leetcode135 分發糖果

一道很有意思的題目,難度級別為 困難。題目是這樣的的 老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需...

leetcode135 分發糖果

老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 輸入 1,0,2 輸出 ...