思路:
一边一边比较
具体的在代码注释中
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int> candy(ratings.size() , 1);
// 右边 比 左边大
// 这里是正序遍历
// 起始点是从 下标为 1 开始的,因为要和前面一个比较
for(int i = 1; i < ratings.size(); i++)
{
if(ratings[i] > ratings[ i - 1]) // 如果 右边更大 ,就在左边的基础上 + 1
candy[i] = candy[i - 1] + 1;
}
// 左边 比 右边 大
// 注意这里是倒序遍历,正序遍历会出问题,模拟一遍就知道了
// 同时 这里的起始点 是倒数第二个,因为要和后一个进行比较
for(int i = ratings.size() - 2; i >=0 ; i--)
{
if(ratings[i + 1] < ratings[ i]) // 如果左边的更大,就在右边的糖果基础上 + 1
{
candy[i] = max(candy[i], candy[i + 1] + 1); // 取最大值
}
}
int res = 0;
for(int c : candy)
res += c;
return res;
}
};