老師想給孩子們分發糖果,有 N 個孩子站成了一條直線,老師會根據每一個孩子的表現,預先給他們評分。spa
你須要按照如下要求,幫助老師給這些孩子分發糖果:code
那麼這樣下來,老師至少須要準備多少顆糖果呢?blog
示例 1:io
輸入: [1,0,2] 輸出: 5 解釋: 你能夠分別給這三個孩子分發 二、一、2 顆糖果。
示例 2:class
輸入: [1,2,2] 輸出: 4 解釋: 你能夠分別給這三個孩子分發 一、二、1 顆糖果。 第三個孩子只獲得 1 顆糖果,這已知足上述兩個條件。
兩邊遍歷解法,感受不像動態規劃
/* 遍歷兩邊,首先每一個人得一塊糖,第一遍從左到右,若當前點比前一個點高就比前者多一塊。 這樣保證了在一個方向上知足了要求。第二遍從右往左,若左右兩點,左側高於右側,但 左側的糖果數很少於右側,則左側糖果數等於右側糖果數+1,這就保證了另外一個方向上知足要求 */ 連接:https://www.nowcoder.com/questionTerminal/74a62e876ec341de8ab5c8662e866aef 來源:牛客網 public class Solution { public int candy(int[] ratings) { if(ratings==null || ratings.length==0) { return 0; } int[] count = new int[ratings.length]; //每一個孩子初始都有一個糖果 Arrays.fill(count,1); int sum = 0; for(int i=1;i<ratings.length;i++) { if(ratings[i]>ratings[i-1]) { count[i] = count[i-1]+1; } } for(int i=ratings.length-1;i>0;i--) { sum+=count[i]; if(ratings[i]<ratings[i-1] && count[i]>=count[i-1]) { count[i-1] = count[i]+1; } } sum+=count[0]; return sum; } }