每个孩子都有一个评分,评分高的,糖果就多(相邻的情况下,如果是一个散列的数集,就没有必要了)
思路:
遍历第一次:从前往后遍历数组,如果rating[i] > rating[i-1],则给当前的人比之前的多一个糖果,也就是res[i] = res[i-1] + 1
如果rating数组是升序,那么这么做就没问题了,但是如果数组中出现降序,那么这个处理就不够了。
遍历第二次:从后往前遍历数组,如果存在rating[i] < rating[i-1](也就是降序),那么就有res[i - 1] = Math.max(res[i - 1], res[i] + 1),选择一个较大的赋值给res[i - 1]
注意处理临界值的问题
var candy = function (ratings) {
let n = ratings.length
let res = new Array(n).fill(0)
for (let i = 0; i < n; ++i) {
if (i > 0 && ratings[i] > ratings[i - 1]) {
res[i] = res[i - 1] + 1
} else {
res[i] = 1
}
}
let sum = 0
for (let i = n - 1; i >= 0; --i) {
if (i > 0 && ratings[i] < ratings[i - 1]) {
res[i - 1] = Math.max(res[i - 1], res[i] + 1)
}
sum += res[i]
}
return sum
};
测试用例