135. Candy 分糖果
135. Candy 分糖果
int candy(vector<int>& rate) {
int len=rate.size();
int res=len;
if (len<=1) return res;
vector<int> a(len, 0);
// 保证右边的邻居一定比中间的大
for(int i=1;i<len;++i) {
if (rate[i]>rate[i-1])
a[i]=a[i-1]+1;
}
for(int i=len-1;i>0;--i) {
// 保证左边的邻居一定比中间的大
if (rate[i-1]>rate[i])
a[i-1]=max(a[i-1], a[i]+1); // 用 max 因为可能会破坏右限制
}
for(auto n : a)
res+=n;
return res;
}#greedy