- 比较要单头比,即同时不能跟左右两边一起
- 因为两边一起比的结果就是,遍历后面元素后,会把之前调好的数量值做破坏性修改,造成分配数量错误问题
- 比较右孩子与左孩子要从左向右遍历
- 比较左孩子与右孩子要从右向左遍历
- 因为如果反向遍历,会造成之前比较结果会被影响而变得不正确
- 正因为从二个方向遍历,会得到两个糖果数量,这两个数量要取最大值
#include <iostream>
#include <vector>
class Solution {
public:
int candy(std::vector<int>& ratings) {
std::vector<int> candy(ratings.size(), 1);
for (int i = 1; i < ratings.size(); ++i)
if (ratings.at(i) > ratings.at(i - 1))
candy.at(i) = candy.at(i - 1) + 1;
for (int i = ratings.size() - 2; i >= 0; --i)
if (ratings.at(i) > ratings.at(i + 1))
candy.at(i) = std::max(candy.at(i + 1) + 1, candy.at(i));
int sum = 0;
for (auto i: candy)
sum += i;
return sum;
}
};
int main()
{
std::vector<int> ratings{1, 2, 2};
Solution s;
std::cout << s.candy(ratings) << std::endl;
return 0;
}