413.arithmetic-slices.go 325 B

123456789101112131415161718
  1. func numberOfArithmeticSlices(A []int) (res int) {
  2. n := len(A)
  3. if n <= 2 {
  4. return 0
  5. }
  6. diff, cnt := A[1]-A[0], 2
  7. for i := 2; i < n; i++ {
  8. if A[i]-A[i-1] == diff {
  9. cnt++
  10. } else {
  11. // 1 + ... + cnt-2
  12. res += (cnt - 1) * (cnt - 2) / 2
  13. diff = A[i] - A[i-1]
  14. cnt = 2
  15. }
  16. }
  17. return res + (cnt-1)*(cnt-2)/2
  18. }