您的位置:首页 > 其它

leetcode: Candy

2015-03-21 10:40 218 查看
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?

Hide Tags
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: