题目来源: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;}
};
这个题如果同时考虑两边,对于连续相同评分的孩子分情况讨论很复杂。