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?
/** * Abstract each slope, and sort by the length of the slop. For those slop whose length is one, then add one from * it bottom. The candy is the sum from the bottom to ceil. * When abstract the slope, we should node the length of the length of the before slop. * 1. if the ratings equals to their neighbors? I think it should be in just one. * * */ //9:38->the equals should get just 1,not equal than its neighbor.10:00 finished. class Solution { public: int candy(vector<int> &ratings) { int minCandy = 0,tmp=0; int i=0,len = ratings.size(); // those who's rating equals to it's neighbors should be just one vector<int> candies(len,1); int candy = 1; candies[0] = 1; // from left to right for(i=1;i<len;i++) { if(ratings[i]>ratings[i-1]) { candies[i] = candies[i-1]+1; } } // from right to left for(i=len-2;i>=0;i--) { if(ratings[i]>ratings[i+1]) { tmp = candies[i+1]+1; if(tmp>candies[i]) { candies[i] = tmp; } } } // add the sum for(i=0;i<len;i++) { minCandy += candies[i]; } return minCandy; } };
原文地址:http://blog.csdn.net/nan327347465/article/details/39156857