N 個孩子排成一列,每人有評分 rating[i]。分糖規則:
求最少總糖果數。
candy[i] = 1 若 rating[i] ≤ rating[i-1],否則 candy[i] = candy[i-1] + 1。保證左側條件。rating[i] > rating[i+1],candy[i] = max(candy[i], candy[i+1] + 1)。修正右側條件,取最大值保證不破壞左側已滿足條件。candy[]。int candy(vector& ratings) {
int n = ratings.size();
vector candy(n, 1);
for (int i=1;i=0;i--)
candy[i] = ratings[i] <= ratings[i+1] ? candy[i] : max(candy[i], candy[i+1]+1);
return accumulate(candy.begin(), candy.end(), 0);
}
時間 O(N),空間 O(N)(可優化至 O(1) 額外空間)。