i traverses from 1 to n while j traverses from i-1 to 0. When j+1 equal to i, the default equal difference is A[i] - A[j], and we treat it as a arithmetic slices, so, dp[j] = 1.
int numberOfArithmeticSlices(vector<int>& A) {
int n = A.size();
vector<int> dp(n, 0);
int count = 0;
int diff = 0;
for (int i=1; i<n; i++) {
// dp[i] = 1;
for (int j=i-1; j>=0; j--) {
if (j+1 == i) {
dp[j] = 1;
diff = A[i]-A[j];
} else if (dp[j+1] && (A[j+1]-A[j] == diff)) {
dp[j] = dp[j+1];
if (i-j > 1) {
count++;
}
} else {
dp[j] = 0;
}
}
}
return count;
}
DP
int numberOfArithmeticSlices(vector<int>& A) {
int n = A.size();
int* dp = new int[n]();
int sum = 0;
for (int i=2; i<n; i++) {
if (A[i] - A[i-1] == A[i-1] - A[i-2]) {
dp[i] = dp[i-1] + 1;
sum += dp[i];
}
}
return sum;
}