起初发现这道题很像子串问题,我们只需要求出每个连续的Slices的长度,然后计算每个连续Slices的子串个数即可。假设某个连续的串长度为N,那么它所包含的子串个数为
(N-1)*(N-2)/2,很简单的数学问题
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
if (A.size() < 3)
return 0;
else
{
int j = 0;
int num[100] = {};
int dif = A[1] - A[0];
int l = 2;
for (int i = 2; i < A.size(); ++i)
{
if ((A[i] - A[i - 1]) == dif)
l++;
else
{
if (l>2)
num[j++] = l;
dif = A[i] - A[i - 1];
l = 2;
}
}
if (l>2)
num[j++] = l;
if (j == 0)
return 0;
else
{
int sum = 0;
for (int i = 0; i < j; ++i)
sum += (num[i] - 1)*(num[i] - 2) / 2;
return sum;
}
}
}
};
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
if (A.size() < 3)
return 0;
else
{
int sum = 0;
vector<int>dp(A.size(), 0);
int dif = A[1] - A[0];
for (int i = 2; i < A.size();++i)
if (A[i] - A[i - 1] == dif)
{
dp[i] = dp[i - 1] + 1;
sum += dp[i];
}
else
dif = A[i] - A[i - 1];
return sum;
}
}
};