题解
这道题略微特殊,因为要求是等差数列,可以很自然的想到子数组必定满足 num[i]-num[i-1]= num[i-1]-num[i-2]。然而由于我们对于 dp 数组的定义通常为以i 结尾的,满足某些条件的子数组数量,而等差子数组可以在任意一个位置终结,因此此题在最后需要对 dp 数组求和。
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& nums) {
int n = nums.size();
if(n<3)
return 0;
vector<int>dp(n+1,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);
}
};