dp[i] 表示以位置 i 为结尾的等差子数组个数   

所以对于位置i+1处,其dp[i+1]与dp[i]的关系为dp[i]+1; 为什么要加1呢,比如dp[i]={(1,2,3,4),(2,3,4)}均为以4结尾的,然后现在i+1位置值为5,那么dp[i+1]可以为{(1,2,3,4,5),(2,3,4,5),(3,4,5)},可以发现本来对于dp[i]的(3,4)不构成等差数列,但现在加了5就新加了一个。对于每个i都是如此。都会基于上一个的长度为2的新构成一个新的等差数列。所以会加1

然后遍历dp数组,求和结果就是所有的子数组数目

class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& nums) {
        int n = nums.size();
        if (n < 3) return 0;//小于3不构成等差数列直接返回0
        vector<int> dp(n, 0);
        for (int i = 2; i < n; ++i) {
            if (nums[i] - nums[i-1] == nums[i-1] - nums[i-2]) {
                dp[i] = dp[i-1] + 1;
            }
        }
        return accumulate(dp.begin(), dp.end(), 0);//求和
        }
};