问题描述:
A sequence of number is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.
these are arithmetic sequence:
1, 3, 5, 7, 9 7, 7, 7, 7 3, -1, -5, -9
The following sequence is not arithmetic.
1, 1, 2, 5, 7
A zero-indexed array A consisting of N numbers is given. A slice of that array is any pair of integers (P, Q) such that 0 <= P < Q < N.
A slice (P, Q) of array A is called arithmetic if the sequence:
A[P], A[p + 1], ..., A[Q - 1], A[Q] is arithmetic. In particular, this means that P + 1 < Q.
The function should return the number of arithmetic slices in the array A.
示例:
A = [1, 2, 3, 4] return: 3, for 3 arithmetic slices in A: [1, 2, 3], [2, 3, 4] and [1, 2, 3, 4] itself.
问题分析:
根据问题,我们可设置一个状态数组dp,dp[i]用来记录以i为结尾的等差数列个数。则状态转移过程为if (A[i] - A[i - 1] == A[i - 1] - A[i - 2]) dp[i] += dp[i - 1] + 1;最后得出总的个数。
过程详见代码:
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
vector<int> dp(A.size(),0);
int sum = 0;
for (int i = 2; i < A.size(); i++)
{
if (A[i] - A[i - 1] == A[i - 1] - A[i - 2])
dp[i] += dp[i - 1] + 1;
sum += dp[i];
}
return sum;
}
};