经典的模式,前后扫描即可得结果:
class Solution {
public:
int candy(vector<int> &ratings) {
int n=ratings.size();
vector<int> plus(n);
for(int i=1,cur=1;i<n;i++){
if(ratings[i]>ratings[i-1])
plus[i]=max(cur++,plus[i]);
else
cur=1;
}
for(int i=n-2,cur=1;i>=0;i--){
if(ratings[i]>ratings[i+1])
plus[i]=max(cur++,plus[i]);
else
cur=1;
}
return accumulate(&plus[0],&plus[0]+n,n);
}
};

本文介绍了一种使用前后扫描的经典算法来解决特定问题的方法。通过两次遍历数组,该算法能够高效地确定每个元素的最终值,并返回计算结果。首次从左到右遍历,根据条件更新元素值;随后从右到左再次遍历,确保每个位置上的值是最优的。
1202

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



