leetcode-candy
2014-07-11 21:57
316 查看
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?
思路:
之前用暴力解法,超时。。。。参考网上Accepted解法:贪心法,先正序遍历,处理前一个小于后一个的情况,再逆序处理前一个大于后一个的情况(因为这种情况会导致更前面的分配到的candies发生变化,故逆序处理。),时间复杂度为o(n),空间复杂度o(n).
代码:
int candy(vector<int> &ratings) {
int len=ratings.size();
int res=0;
int *candyArray=new int[len];
for(int i=0; i<len; ++i)
{
candyArray[i]=1;
}
for(int i=0; i<len-1; ++i)
{
if(ratings[i]<ratings[i+1])
{
candyArray[i+1]=candyArray[i]+1;
}
}
int tmp=0;
for(int i=len-1; i>0; --i)
{
if(ratings[i] < ratings[i-1])
{
tmp=candyArray[i]+1;
if(candyArray[i-1]<tmp)
{
candyArray[i-1]=tmp;
}
}
}
for(int i=0; i<len; ++i)
{
res=res+candyArray[i];
}
return res;
}
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?
思路:
之前用暴力解法,超时。。。。参考网上Accepted解法:贪心法,先正序遍历,处理前一个小于后一个的情况,再逆序处理前一个大于后一个的情况(因为这种情况会导致更前面的分配到的candies发生变化,故逆序处理。),时间复杂度为o(n),空间复杂度o(n).
代码:
int candy(vector<int> &ratings) {
int len=ratings.size();
int res=0;
int *candyArray=new int[len];
for(int i=0; i<len; ++i)
{
candyArray[i]=1;
}
for(int i=0; i<len-1; ++i)
{
if(ratings[i]<ratings[i+1])
{
candyArray[i+1]=candyArray[i]+1;
}
}
int tmp=0;
for(int i=len-1; i>0; --i)
{
if(ratings[i] < ratings[i-1])
{
tmp=candyArray[i]+1;
if(candyArray[i-1]<tmp)
{
candyArray[i-1]=tmp;
}
}
}
for(int i=0; i<len; ++i)
{
res=res+candyArray[i];
}
return res;
}
相关文章推荐
- [LeetCode]Candy
- Leetcode: Candy
- leetcode之Candy
- leetcode -day9 Candy & Gas Station & Binary Tree Maximum Path Sum
- 【LeetCode】Candy
- 【leetcode】Candy(python)
- LeetCode算法题目:Candy
- LeetCode: Candy
- LeetCode candy
- LeetCode Candy Greedy
- LeetCode:Candy
- [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现
- [leetcode] Candy
- [LeetCode] Candy
- [Leetcode] Candy
- Leetcode - candy
- Leetcode 动态规划 Candy
- [LeetCode]Candy
- leetcode 150: Candy
- leetcode:candy