分糖果问题
Posted vector6_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分糖果问题相关的知识,希望对你有一定的参考价值。
分糖果问题
一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:
-
每个孩子不管得分多少,起码分到一个糖果。
-
任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)
给定一个数组arr代表得分数组,请返回最少需要多少糖果。
class Solution {
public:
/**
* 遍历两次,先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的糖果数加 1;
* 再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加1。
* @return int整型
*/
int candy(vector<int>& arr) {
if(arr.size()<2)
return arr.size();
int n = arr.size();
vector<int> res(n,1);
for(int i=1; i<n; ++i)
{
if(arr[i] > arr[i-1])
res[i] = res[i-1]+1;
}
for(int i=n-1; i>0; --i)
{
if(arr[i-1]>arr[i])
res[i-1] = max(res[i-1], res[i]+1);
}
int sum = 0;
for(int i=0; i<res.size(); ++i)
{
sum += res[i];
}
return sum;
}
};
以上是关于分糖果问题的主要内容,如果未能解决你的问题,请参考以下文章