题目描述:
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.
For example, 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.
Example:
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.
求数组的有多少个子序列是等差数列(数列最少包含3个元素)。自然是利用动态规划,用x[i][j]表示从A[i]到A[j]是否为等差数列,那么可以根据x[i][j-1]判断x[i][j]。
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
int n=A.size();
if(n<3) return 0;
int result=0;
vector<vector<bool>> x(n,vector<bool>(n,false));
for(int i=0;i<=n-3;i++)
{
for(int j=i+2;j<=n-1;j++)
{
if(j==i+2&&A[i]+A[i+2]==2*A[i+1])
{
x[i][j]=true;
result++;
}
else if(x[i][j-1]==true&&A[j]+A[j-2]==2*A[j-1])
{
x[i][j]=true;
result++;
}
else break;
}
}
return result;
}
};
本文介绍了一种使用动态规划方法来计算数组中等差子序列数量的算法。该算法通过构建二维布尔数组来判断子序列是否为等差,并最终返回等差子序列的数量。
1296

被折叠的 条评论
为什么被折叠?



