【题意】输入一个数组A,输出A中有多少等差数列(长度大于等于3)
【解】记录两组数据
f[i]:从i-1往前最多多少个连续的数成等差数列
g[i]:A[0...i]中等差数列的个数
几种情况:
1.如果A[i],A[i - 1],A[i - 2]成等差数列,f[i - 1] = 0: g[i] = g[i - 1] + 1, f[i] = 3
2.如果A[i],A[i - 1],A[i - 2]成等差数列,f[i - 1] != 0: g[i] = g[i - 1] + f[i - 1] - 1, f[i] = f[i - 1] + 1
3.如果A[i],A[i - 1],A[i - 2]不成等差数列,f[i] = 0, g[i] = g[i - 1]
代码如下:
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
int n = A.size();
if (n <= 2) return 0;
vector<int> f(n, 0);
vector<int> g(n, 0);
if (A[2] - A[1] == A[1] - A[0])
{
f[2] = 3;
g[2] = 1;
}
for (int i = 3; i < n; i++)
{
if (A[i] - A[i - 1] == A[i - 1] - A[i - 2])
{
if (f[i - 1] == 0)
{
g[i] = g[i - 1] + 1;
f[i] = 3;
}
else
{
g[i] = g[i - 1] + f[i - 1] - 1;
f[i] = f[i - 1] + 1;
}
}
else
{
f[i] = 0;
g[i] = g[i - 1];
}
}
return g[n - 1];
}
};
虽然AC但是我不能确定是否正确。。。测试数据只有15个。。。自己发现有错误的代码也过了。。。如有错误请指出,谢谢!