有N个孩子站在一排。 每个孩子被分配一个评分值。
你给这些孩子的糖果满足以下要求:
每个孩子必须有至少一个糖果。
评分较高的孩子比他们的邻居获得更多的糖果。
你必须给的最低糖果是什么?
class Solution { public: int candy(vector<int> &ratings) { int len = ratings.size(); if (len == 1) return 1; //从左边遍历 升序 找到大的就加1 vector<int> res(len, 1); int sum = 0; for (int i=0; i<len-1; i++){ if (ratings[i+1] > ratings[i]) res[i+1] = res[i]+1; } //在从右边遍历 升序 找到大的 加1 //两次遍历类似于一次遍历两次判断。这样比较清晰 for (int j=len-1; j>0; j--){ if (ratings[j-1] > ratings[j] && res[j-1]<=res[j]) res[j-1] = res[j]+1; } for (int i=0; i<len; i++){ sum += res[i]; } return sum; } };
原文:http://www.cnblogs.com/Kobe10/p/6367045.html