problem:
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?
Greedythinking:
(1)一道简单的贪心题目,为何通过率这么低??题目中根本没提属性相等时怎么发糖果。又是一道不严谨的题目。提交发现,
122的小盆友发了4个糖果,说明,第三个小盆友发了1个糖果,换做你是小盆友,你会高兴吗...
(2)撇开相等的情况不说,这道题只要处理好递减的情况就行了。递增或者乱序好处理些
code:
class Solution{ public: int candy(vector<int> &ratings) { int Total = 0; /// Total candies int length = 0; /// Continuous descending length of rate int nPreCanCnt = 1; /// Previous child's candy count int beforeDenc = nPreCanCnt; if(ratings.begin() != ratings.end()) { Total++; //Counting the first child's candy (1). for(vector<int>::iterator i = ratings.begin()+1; i!= ratings.end(); i++) { if(*i < *(i-1)) { length++; if(beforeDenc <= length) { Total++; } Total += length; nPreCanCnt = 1; //This step is important, it ensures that once we leave the decending sequence, candy number start from 1 } else { int curCanCnt = 0; if(*i > *(i-1)) { curCanCnt = (nPreCanCnt + 1); } else { curCanCnt = 1; } Total += curCanCnt; nPreCanCnt = curCanCnt; length = 0; //reset length of decending sequence beforeDenc = curCanCnt; } } } return Total; } };
原文地址:http://blog.csdn.net/hustyangju/article/details/45367185