https://leetcode.cn/problems/candy/solutions/533150/fen-fa-tang-guo-by-leetcode-solution-f01p/?envType=study-plan-v2&envId=top-interview-150

go

package leetcode150

import "testing"

func TestCandy(t *testing.T) {
    ratings := []int{1, 2, 2}
    res := candy(ratings)
    println(res)
}

func candy(ratings []int) int {
    if len(ratings) <= 1 {
        return len(ratings)
    }
    leftAns := make([]int, len(ratings))
    rightAns := make([]int, len(ratings))
    // 看题解后,发现,此处不需要考虑右边值。右边值的答案在下面的循环中
    if ratings[0] > ratings[1] {
        leftAns[0] = 2
    } else {
        leftAns[0] = 1
    }

    for i := 1; i < len(ratings); i++ {
        if ratings[i] > ratings[i-1] {
            leftAns[i] = leftAns[i-1] + 1
        } else {
            leftAns[i] = 1
        }
    }

    if rightAns[len(ratings)-1] > rightAns[len(ratings)-2] {
        rightAns[len(ratings)-1] = 2
    } else {
        rightAns[len(ratings)-1] = 1
    }
    for i := len(ratings) - 2; i >= 0; i-- {
        if ratings[i] > ratings[i+1] {
            rightAns[i] = rightAns[i+1] + 1
        } else {
            rightAns[i] = 1
        }
    }

    sum := 0
    for i := 0; i < len(ratings); i++ {
        c := leftAns[i]
        if leftAns[i] < rightAns[i] {
            c = rightAns[i]
        }
        sum += c
    }

    return sum
}