您的位置:首页 > 其它

(动态规划)最小分糖果问题

2017-02-05 10:14 225 查看
题目:

有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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: