# ---
# title: 413. Arithmetic Slices
# id: problem413
# author: Indigo
# date: 2021-06-20
# difficulty: Medium
# categories: Math, Dynamic Programming
# link: <https://leetcode.com/problems/arithmetic-slices/description/>
# hidden: true
# ---
# 
# A sequence of numbers is called arithmetic if it consists of at least three
# elements and if the difference between any two consecutive elements is the
# same.
# 
# For example, these are arithmetic sequences:
# 
#     
#     
#     1, 3, 5, 7, 9
#     7, 7, 7, 7
#     3, -1, -5, -9
# 
# The following sequence is not arithmetic.
# 
#     
#     
#     1, 1, 2, 5, 7
# 
# 
# 
# A zero-indexed array A consisting of N numbers is given. A slice of that array
# is any pair of integers (P, Q) such that 0 <= P < Q < N.
# 
# A slice (P, Q) of the array A is called arithmetic if the sequence:  
# A[P], A[P \+ 1], ..., A[Q - 1], A[Q] is arithmetic. In particular, this means
# that P + 1 < Q.
# 
# The function should return the number of arithmetic slices in the array A.
# 
# 
# 
# **Example:**
# 
#     
#     
#     A = [1, 2, 3, 4]
#     
#     return: 3, for 3 arithmetic slices in A: [1, 2, 3], [2, 3, 4] and [1, 2, 3, 4] itself.
#     
# 
# 
## @lc code=start
using LeetCode

function number_of_arithmetic_slices(nums::Vector{Int})
    dp, res = 0, 0
    for i in 3:length(nums)
        if nums[i] + nums[i - 2] == (nums[i - 1] << 1)
            res += (dp += 1)
        else
            dp = 0
        end
    end
    return res
end
## @lc code=end
