贪心策略
1. 正向遍历一遍ratings数组,如果后边邻居的rating更高,则邻居的糖果数+1;
2. 反向遍历一遍ratings数组,如果前边邻居的rating更高,则邻居的糖果数取当前儿童糖果树+1和前边邻居糖果数中的较大值。
3. 所有糖果数量求和,返回结果。
int candy(vector<int>& ratings) {
int size = ratings.size();
if (size <= 1) {
return size;
}
vector<int> num(size, 1);
for (int i = 1; i < size; i++) {
if (ratings[i] > ratings[i-1]) {
num[i] = num[i-1] + 1;
}
}
for (int i = size-1; i > 0; i--) {
if (ratings[i-1] > ratings[i]) {
num[i-1] = max(num[i]+1, num[i-1]);
}
}
int res = 0;
for (int i = 0; i < size; i++) {
res += num[i];
}
return res;
}