446.arithmetic-slices-ii-subsequence.go 347 B

12345678910111213141516171819
  1. func numberOfArithmeticSlices(A []int) (cnt int) {
  2. n := len(A)
  3. if n < 3 {
  4. return
  5. }
  6. dp := make([]map[int]int, n)
  7. for i := 0; i < n; i++ {
  8. dp[i] = make(map[int]int)
  9. }
  10. for i := 1; i < n; i++ {
  11. for j := 0; j < i; j++ {
  12. diff := A[i] - A[j]
  13. inc := dp[j][diff] + 1
  14. cnt += inc - 1
  15. dp[i][diff] = dp[i][diff] + inc
  16. }
  17. }
  18. return
  19. }