贪心贪的是单调序列,正序遍历单调增,倒序遍历单调减->大值顶替小值。
class Solution {
public:
int candy(vector<int>& ratings) {
int size = ratings.size();
vector<int> val(size, 1); //保底是1,默认全是最低值
for(int i = 0; i < size - 1; i++)
{
if(ratings[i] < ratings[i+1])
{
//单调加
val[i+1] = val[i] + 1;
}
}
for(int i = size -1; i > 0; i--)
{
if (ratings[i] < ratings[i-1])
{
if (val[i-1] < val[i] + 1)
{
val[i-1] = val[i] + 1; //单调加,大值优先
}
}
}
int res=0;
for(auto i : val)
{
//cout << i <<endl;
res += i;
}
return res;
}
};