老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果:
那麼這樣下來,老師至少需要準備多少顆糖果呢?
輸入: [1,2,2]
輸出: 4
解釋: 你可以分別給這三個孩子分發 1、2、1 顆糖果。
第三個孩子只得到 1 顆糖果,這已滿足上述兩個條件。
從左遍歷到右,在從右遍歷到左,最後統計最大值就完事啦。(貪心,我的實現)
相鄰的學生中,評分高的學生必須獲得更多的糖果等價於所有學生滿足左規則且滿足右規則。
演算法流程:
經過此規則分配後,可以保證所有學生糖數量滿足左規則。
同理,在此規則下從右至左遍歷學生成績並記錄在陣列right
中,可以保證所有學生糖數量滿足右規則
最終,取以上2
輪遍歷left
和right
對應學生糖果數的最大值,這樣則同時滿足左規則和右規則,即得到每個同學的最少糖果數量。
更優演算法:(只看看思路二就好,o(n
)+o(
1)
o(n) + o(1)
o(n)+o
(1))
class
solution
for(
int i = length-
2; i >=
0; i--
)int res =0;
for(
int i =
0; i < length; i++
) res +
=max
(left[i]
, right[i]);
return res;}}
;
LeetCode 135 分發糖果
老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 輸入 1,0,2 輸出 ...
leetcode135 分發糖果
一道很有意思的題目,難度級別為 困難。題目是這樣的的 老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需...
leetcode135 分發糖果
老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 輸入 1,0,2 輸出 ...