以dp[i] 表示以A[i]结尾的arithmetic slices 个数,可列出状态转移方程:
dp[i] = dp[i-1] - 1
不满足条件的地方dp[i] = 0 ,最后将dp数组加和
代码如下:
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
int n = A.size();
if (n < 3) return 0;
vector<int> dp(n, 0); // 以A[i]结尾的 arithmetic slices个数
if (A[2]-A[1] == A[1]-A[0]) dp[2] = 1;
int result = dp[2];
for (int i = 3; i < n; ++i) {
if (A[i]-A[i-1] == A[i-1]-A[i-2])
dp[i] = dp[i-1] + 1;
result += dp[i];
}
return result;
}
};