您的位置:首页 > 其它

leetCode #135 Candy

2015-09-01 15:03 405 查看
题目:给一排小孩发糖果,每个小孩有自己的评分,评分高的小孩得到的糖果比评分低的左右邻居要多。每个小孩至少一个糖果。问最少发多少糖果?

分析:

对于一个顺序上升或者下降的评分序列,小孩得到的糖果最少也得是递增/递减的

比如

评分 1 3 5 7 8

糖果 1 2 3 4 5

评分 9 7 4 3 1

糖果 5 4 3 2 1

而对于非递增/递减的评分序列,可以拆分成几段上升/下降的序列

另外可以考虑,从左到右扫描评分数组,使之满足最少的递增情况的糖果分发

然后从右到左扫描,使之满足最少的递减情况的糖果分发。

答案:
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int> candies;
candies.push_back(1);
for (int i = 1; i< ratings.size(); i++){
if (ratings[i-1] < ratings[i])
candies.push_back(candies[i-1] +1);// i should has more than i-1
else
candies.push_back(1);
}

for (int i = ratings.size() - 2; i>=0; i--){
if (ratings[i] > ratings[i+1] && candies[i] <= candies[i+1])
candies[i] = (candies[i+1] +1);// i should has more than i+1
}

int sum = 0;
for (int i = 0; i< candies.size(); i++){
sum +=candies[i];
}
return sum;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: