给了一个数组,里面是每个小孩的分数,要求相邻小孩中得分高的那一名得到的糖多一些(并不需要得分越高拿的糖越多,只比旁边分低的多一个就行)
解题顺序:
1. 新建一个数组大小为小孩数据量,初始化每个人分一颗糖;
2. 依次从左到右遍历,右遍比左边得分高就将其糖数加一;
3. 再从后向前遍历,左边比右遍高,就将左边加一。
class Solution {
public:
int candy(vector<int>& arr) {
//记录每个位置的糖果数,初始为1
vector<int> nums(arr.size(), 1);
//从左到右遍历
for(int i = 1; i < arr.size(); i++){
//如果右边在递增,每次增加一个
if(arr[i] > arr[i - 1])
nums[i] = nums[i - 1] + 1;
}
//记录总糖果数
int res = nums[arr.size() - 1];
//从右到左遍历
for(int i = arr.size() - 2; i >= 0; i--){
//如果左边更大但是糖果数更小
if(arr[i] > arr[i + 1] && nums[i] <= nums[i + 1])
nums[i] = nums[i + 1] + 1;
//累加和
res += nums[i];
}
return res;
}
};
文章介绍了一个编程问题,即根据一组小孩的分数分配糖果,确保得分较高的孩子得到更多糖果(仅需比相邻的低分孩子多一个)。解决方案包括两步遍历:首先从左到右遍历,若右侧孩子分数高则增加糖果数;然后从右到左遍历,检查左侧孩子是否应获得更多的糖果。最后返回总共分配的糖果数。
230

被折叠的 条评论
为什么被折叠?



