【leetcode】135. 分发糖果

92 阅读1分钟

image.png

每个孩子都有一个评分,评分高的,糖果就多(相邻的情况下,如果是一个散列的数集,就没有必要了)
思路:
遍历第一次:从前往后遍历数组,如果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
};

测试用例
测试用例.png