problem:
There are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:
- Each child must have at least one candy.
- Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?
Greedy
题意: 给小盆友发糖果,属性高的糖果要更多
thinking:
(1)一道简单的贪心题目,为何通过率这么低??题目中根本没提属性相等时怎么发糖果。又是一道不严谨的题目。提交发现,
122的小盆友发了4个糖果,说明,第三个小盆友发了1个糖果,换做你是小盆友,你会高兴吗...
(2)撇开相等的情况不说,这道题只要处理好递减的情况就行了。递增或者乱序好处理些
code:
class Solution{
public:
int candy(vector<int> &ratings) {
int Total = 0; /// Total candies
int length = 0; /// Continuous descending length of rate
int nPreCanCnt = 1; /// Previous child's candy count
int beforeDenc = nPreCanCnt;
if(ratings.begin() != ratings.end())
{
Total++; //Counting the first child's candy (1).
for(vector<int>::iterator i = ratings.begin()+1; i!= ratings.end(); i++)
{
if(*i < *(i-1))
{
length++;
if(beforeDenc <= length)
{
Total++;
}
Total += length;
nPreCanCnt = 1; //This step is important, it ensures that once we leave the decending sequence, candy number start from 1
}
else
{
int curCanCnt = 0;
if(*i > *(i-1))
{
curCanCnt = (nPreCanCnt + 1);
}
else
{
curCanCnt = 1;
}
Total += curCanCnt;
nPreCanCnt = curCanCnt;
length = 0; //reset length of decending sequence
beforeDenc = curCanCnt;
}
}
}
return Total;
}
};
本文深入探讨了一个看似简单的儿童糖果分配问题,揭示了贪心算法在处理递减序列时的局限性,并提供了一种解决策略以确保最小糖果数量的分配公平性。通过案例分析和代码实现,读者将了解如何在不牺牲公平性的前提下优化资源分配。
5万+

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



