您的位置:首页 > 其它

Leetcode: Candy

2014-01-11 17:33 387 查看
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?

从左到右扫描一遍,再从右到左扫描一遍。Tricky的地方是相等的rating可以分到的糖果不一样多。

class Solution {
public:
int candy(vector<int> &ratings) {
int size = ratings.size();
vector<int> candies(size, 1);
// Scan from left to right
for (int i = 1; i < size; ++i) {
if (ratings[i] > ratings[i-1]) {
candies[i] = candies[i-1] + 1;
}
}
// Scan from right to left
int result = candies[size - 1];
for (int i = size - 2; i >= 0; --i) {
if (ratings[i] > ratings[i+1]) {
candies[i] = max(candies[i], candies[i+1] + 1);
}
result += candies[i];
}

return result;
}
};

=====================第二次====================

class Solution {
public:
int candy(vector<int> &ratings) {
vector<int> candies(ratings.size(), 1);
for (int i = 1; i < ratings.size(); ++i) {
if (ratings[i] > ratings[i-1]) {
candies[i] = candies[i-1] + 1;
}
}

for (int i = ratings.size() - 2; i >= 0; --i) {
if (ratings[i] > ratings[i+1]) {
candies[i] = max(candies[i], candies[i+1] + 1);
}
}

int result = 0;
for (int i = 0; i < candies.size(); ++i) {
result += candies[i];
}

return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode