标签:
题目描述:
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:
What is the minimum candies you must give?
思路分析:扫描两遍数组。第一遍从左到右,保证相邻的两个元素右边的值比左边的值大(如果右边的权重大于左边的)。第二部扫描从右到做,保证相邻的两个元素左边的值比右边的值大(如果左边的权重大于右边的)。
代码:
class Solution { public: int candy(vector<int> & ratings) { int size = ratings.size(); vector<int> number(size,1); for(int i = 1;i < size;i++) { if(ratings[i] > ratings[i-1]) number[i] = number[i-1] + 1; } for(int i = size-1;i > 0;i--) { if(ratings[i-1] > ratings[i]) number[i-1] = number[i] + 1 > number[i-1] ? number[i] + 1 : number[i-1]; } int sum = 0; for(int i = 0;i < size;i++) sum = sum + number[i]; return sum; } };
标签:
原文地址:http://blog.csdn.net/yao_wust/article/details/45845237