题目描述
一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,规则是如果一个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;所有孩子至少要有一个糖果。求解最少需要多少个糖果。
输入输出样例
Input: [1,0,2]
Output: 5
代码
#include <iostream>
#include "stdafx.h"
#include <vector>
#include<stdio.h>
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
#include<numeric>
using namespace std;
int candy(vector<int>& ratings){
int size = ratings.size();
if(size<2){
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 j=size-1;j>0;--j){
if(ratings[j]<ratings[j-1]){
num[j-1] = max(num[j-1], num[j] + 1);
}
}
return accumulate(num.begin(), num.end(), 0);
}
int main(int argc, char* argv[])
{
int a[3]={1,0,2};
vector<int> vea(a,a+3);
int sum = candy(vea);
printf("%d ",sum);
return 0;
}