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 【贪心法解决,关于贪心法,以后要具体总结】
思路一:1)首先每个人分一个糖果 2)从左往右,当第 i 个人rating > i-1 人的rating 时,且i 的糖果没有第 i-1 个人的糖果多时,num[i] = num[i-1] + 1;
3)从右往左,当第 i 个人rating > i-1 人的rating 时,且i 的糖果没有第 i-1 个人的糖果多时,num[i] = num[i-1] + 1;
4)将所有的num[i] 相加即可
代码如下:
class Solution {
public:
int candy_solu_one(vector<int> &ratings) {
int len = ratings.size();
int* num = new int[len];
int total = 0;
if (len <= 1)
return len;
for (int i = 0; i < len; i++)
num[i] = 1;
for (int j = 1; j < len; j++)
{
if (ratings.at(j) > ratings.at(j - 1) && num[j] <= num[j - 1])
{
num[j] = num[j - 1] + 1;
}
}
for (int j = len - 1; j >= 1; j--)
{
if (ratings.at(j) < ratings.at(j - 1) && num[j] >= num[j - 1])
{
num[j - 1] = num[j] + 1;
}
}
for (int j = 0; j < len; j++)
total += num[j];
return total;
}
};
本文介绍了一个经典的贪心算法问题——如何分配最少数量的糖果给按评级排队的孩子们,确保每个孩子至少得到一个糖果,并且评级高的孩子比邻居得到更多糖果。
1053

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



