题目描述
有N个小朋友站在一排,每个小朋友都有一个评分
你现在要按以下的规则给孩子们分糖果:
每个小朋友至少要分得一颗糖果
分数高的小朋友要他比旁边得分低的小朋友分得的糖果多
你最少要分发多少颗糖果?
- 思路:正扫一次,倒扫一次
class Solution {
public:
/**
*
* @param ratings int整型vector
* @return int整型
*/
int candy(vector<int>& ratings) {
// write code here
int l = ratings.size();
vector<int> height(l,1);
for(int i=1;i<l;i++){
if(ratings[i] > ratings[i-1]){
height[i] = max(height[i],height[i-1]+1);
}
}
for(int i=l-2;i>=0;i--){
if(ratings[i] > ratings[i+1]){
height[i] = max(height[i],height[i+1]+1);
}
}
int ans = 0;
for(int i=0;i<l;i++){
ans += height[i];
}
return ans;
}
};
本文介绍了一种高效的糖果分配算法,旨在确保评分高的小朋友获得比评分低的邻居更多的糖果,同时最小化总的糖果数量。通过正扫和倒扫两次遍历,算法能够公平且经济地完成分配。

被折叠的 条评论
为什么被折叠?



