老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。
你需要按照以下要求,幫助老師給這些孩子分發糖果:
每個孩子至少分配到 1 個糖果。
相鄰的孩子中,評分高的孩子必須獲得更多的糖果。
那麼這樣下來,老師至少需要準備多少顆糖果呢?
示例 1:
輸入: [1,0,2]
輸出: 5
解釋: 你可以分別給這三個孩子分發 2、1、2 顆糖果。
示例 2:
輸入: [1,2,2]
輸出: 4
解釋: 你可以分別給這三個孩子分發 1、2、1 顆糖果。
第三個孩子只得到 1 顆糖果,這已滿足上述兩個條件。
對於這個問題,主要的條件是要相鄰孩子,得分高的拿的糖果要多(不包括相等得分),還有就是每個人最少都要有乙個。
我們不妨先寬鬆下條件,要是只要從前往後,得分高的孩子得到的糖果多,這該怎麼做呢?
例如輸入: [1,2,3,1,0,1]
那我們就從前往後遍歷,要是後面的人比前面的人得分高,那麼就比前面的人多乙個糖果,否則就分1個即可。那麼分的糖果應該是[1,2,3,1,1,2]。
好了,那麼要是從後往前,要是條件是得分高的孩子糖果多,那麼分法也類似,只是變成從後往前遍歷而已,結果應該是[1,1,3,2,1,1]。
現在條件換成了相鄰的孩子,得分高的孩子糖果多,其實就是上述兩種情況的交集,將兩次結果綜合起來,每個孩子得到的糖果取較大的那個即可滿足這個條件。
**如下,**不見得很完美,基本完全順著這個思路寫,複雜度是o(n)。
class solution
}for(int loop = ratings.size() - 1 ; loop > 0 ; loop--)
}for(int loop = 0 ; loop < ratings.size() ; loop++)
return result;
}};
leetcode135 分發糖果
一道很有意思的題目,難度級別為 困難。題目是這樣的的 老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需...
leetcode135 分發糖果
老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 輸入 1,0,2 輸出 ...
leetcode135 分發糖果
老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 輸入 1,0,2 輸出 ...