# 題目java
老師想給孩子們分發糖果,有 N 個孩子站成了一條直線,老師會根據每一個孩子的表現,預先給他們評分。面試
你須要按照如下要求,幫助老師給這些孩子分發糖果:分佈式
每一個孩子至少分配到 1 個糖果。
相鄰的孩子中,評分高的孩子必須得到更多的糖果。
那麼這樣下來,老師至少須要準備多少顆糖果呢?spa
示例 1:code
輸入: [1,0,2] 輸出: 5 解釋: 你能夠分別給這三個孩子分發 二、一、2 顆糖果。
示例 2:get
輸入: [1,2,2] 輸出: 4 解釋: 你能夠分別給這三個孩子分發 一、二、1 顆糖果。 第三個孩子只獲得 1 顆糖果,這已知足上述兩個條件。
class Solution { public int candy(int[] ratings) { if (ratings == null || ratings.length == 0) return 0; int[] resCandy = new int[ratings.length]; for (int i = 0; i < resCandy.length; i++) { resCandy[i] = 1; } for (int i = 1; i < ratings.length; i++) { // 比左邊的小朋友排名更高. if (ratings[i] > ratings[i - 1]) { resCandy[i] = resCandy[i - 1] + 1; } } for (int i = ratings.length - 2; i >= 0; i--) { // 當前比右邊的小朋友排名更高.resCandy[i] = resCandy[i + 1] + 1 // 同時須要保證不破壞當前比左邊小朋友高的規則 if (ratings[i] > ratings[i + 1]) { resCandy[i] = Math.max(resCandy[i + 1] + 1, resCandy[i]); } } int res = 0; for (int i = 0; i < resCandy.length; i++) { res += resCandy[i]; } return res; } }