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 }
浙公网安备 33010602011771号