135.go 595 B

1234567891011121314151617181920212223242526272829
  1. package main
  2. func candy(ratings []int) (sum int) {
  3. n := len(ratings)
  4. if n <= 1 {
  5. return n
  6. }
  7. candies := make([]int, n)
  8. for i := range candies {
  9. candies[i] = 1
  10. }
  11. for i := 1; i < n; i++ { // Forward increasing
  12. if ratings[i-1] < ratings[i] {
  13. candies[i] = candies[i-1] + 1
  14. }
  15. }
  16. for i := n - 1; 0 < i; i-- { // Backward increasing
  17. if ratings[i] < ratings[i-1] && candies[i-1] < candies[i]+1 {
  18. candies[i-1] = candies[i] + 1
  19. }
  20. sum += candies[i]
  21. }
  22. return sum + candies[0]
  23. }
  24. // func main() {
  25. // println(candy([]int{1, 0, 2}), 5)
  26. // println(candy([]int{1, 2, 2}), 4)
  27. // }