問題:
老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。
你需要按照以下要求,幫助老師給這些孩子分發糖果:
每個孩子至少分配到 1 個糖果。
相鄰的孩子中,評分高的孩子必須獲得更多的糖果。
那麼這樣下來,老師至少需要準備多少顆糖果呢?
示例1:
輸入: [1,0,2]
輸出: 5
解釋: 你可以分別給這三個孩子分發 2、1、2 顆糖果。
示例 2:
輸入: [1,2,2]
輸出: 4
解釋: 你可以分別給這三個孩子分發 1、2、1 顆糖果。
第三個孩子只得到 1 顆糖果,這已滿足上述兩個條件。
解題思路:
這道題仍舊使用貪心策略,與上一題不同的是,不需要排序,只需要簡單的兩次遍歷。首先給每個孩子分一顆糖果,然後從左到右遍歷,如果右邊孩子的表現分高於左邊孩子的表現分,則右邊孩子糖果數加1;然後再從右向左遍歷,如果左邊孩子的表現分高於右邊孩子的表現分,則左邊孩子糖果數加1,。
**:
python:
class
solution
:def
candy
(self, ratings)
: left =[1
for _ in
range
(len
(ratings))]
right = left[:]
for i in
range(1
,len
(ratings)):
if ratings[i]
> ratings[i -1]
: left[i]
= left[i -1]
+1count = left[-1
]for i in
range
(len
(ratings)-2
,-1,
-1):
if ratings[i]
> ratings[i +1]
: right[i]
= right[i +1]
+1count +=
max(left[i]
, right[i]
)return count
c++:
class
solution
vector<
int> count(num,1)
;//糖果數量,初始化為1
for(
int i=
0;i++i)
}for
(int j=num-
1;j>0;
--j)
}return accumulate(count.begin(
), count.end(),
0);// std:
:accumulate 可以很方便}};
Leetcode刷題筆記 135 分發糖果
題目 老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 輸入 1,0,2 ...
力扣刷題筆記 135 分發糖果
題目 135.分發糖果 老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 ...
LeetCode 135 分發糖果
老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 輸入 1,0,2 輸出 ...