给了一个数组,里面是每个小孩的分数,要求相邻小孩中得分高的那一名得到的糖多一些(并不需要得分越高拿的糖越多,只比旁边分低的多一个就行)
解题顺序:
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;
}
};