您的位置:首页 > 其它

[LeetCode] Candy

2014-06-25 15:58 267 查看
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?

例子:

input :     1 1 7 6 5 9 7

第一次扫描:  1 1 2 1 1 2 1

第二次扫描:  1 1 3 2 1 2 1

class Solution {
public:
int candy(vector<int> &ratings) {
int res = 0;
int n = ratings.size();
if (n == 0) {
return res;
}
int *t = new int
;
for (int i = 0; i < n; ++i) {
t[i] = 1;
}
//从左向右扫描  ,保证当前比前一个多
for (int i = 1; i < n; ++i) {
if (ratings[i] > ratings[i-1]) {
t[i] = t[i-1] + 1;
}
}
//从右向左扫描, 保证当前比后一个多
for(int i = n-2;i >= 0;i--)
{
//如果第i个的小孩的权值比i+1个小孩高,但是糖的数目却小或者相等,那么i的糖数目等于i+1的糖数目+1。
if(ratings[i] > ratings[i+1] && t[i] <= t[i+1])
{
t[i] = t[i+1] + 1;
}
}
for (int i = 0; i < n; ++i) {
res += t[i];
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: