您的位置:首页 > 其它

[leetcode] Candy

2014-07-08 16:57 253 查看
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?
思路:初始化所有小孩糖数目为1,从前往后扫描,如果第i个小孩等级比第i-1个高,那么i的糖数目等于i-1的糖数目+1;从后往前扫描,如果第i个的小孩的等级比i+1个小孩高,但是糖的数目却小或者相等,那么i的糖数目等于i+1的糖数目+1。
大神参考链接:http://www.cnblogs.com/TenosDoIt/p/3389479.html
输入示例:
5
1 2 3 4 5
代码:
#include<iostream>
#include<vector>
using namespace std;
int candy(vector<int> &ratings){
vector<int> temp;
int len=ratings.size();
for(int i=0;i<len;i++){
temp.push_back(1);
}
for(int i=1;i<len;i++){
if(ratings[i]>ratings[i-1] ){
temp[i]=temp[i-1]+1;
}
}
for(int i=len-2;i>=0;i--){
if(ratings[i]>ratings[i+1] && temp[i]<=temp[i+1]){
temp[i]=temp[i+1]+1;
}
}
int res;
res=0;
for(int i=0;i<len;i++){
res+=temp[i];
}
return res;
}
int main(){
int n;
cin>>n;
vector<int> ratings;
int a;
for(int i=0;i<n;i++){
cin>>a;
ratings.push_back(a);
}
int res;
res=candy(ratings);
cout<<res<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法