题目来源:https://leetcode.cn/problems/candy/description/
C++题解(来源代码随想录): 先从左往右比较,右边孩子评分比左边高就多发1颗糖,否则就只发1颗;再从右往左比较,左边孩子评分比右边高就多发1颗糖,否则就只发1颗。如此一来,从左到右和从右到左,同个人可能会得到两个不同数目的糖,为了两边都满足,选择大的那个数。
class Solution {
public:
int candy(vector<int>& ratings) {
int len = ratings.size();
if(len == 1) return 1;
vector<int> nums(len, 1);
for(int i = 1; i < len; i++) {
if(ratings[i] > ratings[i - 1]) nums[i] = nums[i - 1] + 1;
}
for(int j = len - 2; j >= 0; j--) {
if(ratings[j] > ratings[j + 1]) nums[j] = max(nums[j], nums[j + 1] + 1);
}
int res = 0;
for(int k = 0; k < len; k++) {
res += nums[k];
}
return res;
}
};
这个题如果同时考虑两边,对于连续相同评分的孩子分情况讨论很复杂。