题目描述
思路分析
题目要输出A中长度至少为3的等差数列的个数,可以用动态规划的思想解决:假设dp[i]表示A中前i个元素包含的等差数列的个数,则当满足A[i]-A[i-1] == A[i-1]-A[i-2]时(等差数列的基本定义),可知dp[i]=dp[i-1]+1,输出的总个数是所有dp[i]的总和。
代码实现
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
int result = 0;
int size = A.size();
vector<int> dp(size, 0);
for (int i = 2; i < size; i++) {
if (A[i]-A[i-1] == A[i-1]-A[i-2]) {
dp[i] = dp[i-1] + 1;
}
result += dp[i];
}
return result;
}
};