原题题目

代码实现(首刷栈溢出 13/15 😦)
int numberOfArithmeticSlices(int* A, int ASize){
if(!ASize)
return 0;
else
{
int dp[ASize][ASize];
int flag[ASize][ASize],i;
for(i=0;i<ASize;i++)
memset(flag[i],0,sizeof(int) * ASize);
int start,end;
long count = 0;
for(end=0;end<ASize;end++)
{
for(start=end-1;start>=0;start--)
{
if(end - start < 2)
dp[start][end] = A[end] - A[start];
else if(end - start == 2)
{
if(dp[start][end-1] == dp[start+1][end])
{
flag[start][end] = 1;
count++;
}
}
else
{
if(flag[start+1][end] && (dp[start][start+1] == dp[start+1][start+2]))
{
flag[start][end] = 1;
count++;
}
}
}
}
return count;
}
}
代码实现(首刷看解 优化代码)
int numberOfArithmeticSlices(int* A, int ASize){
if(ASize <= 2)
return 0;
int dp[ASize],sum = 0,i;
dp[0] = dp[1] = 0;
for(i=2;i<ASize;i++)
{
if(A[i] - A[i-1] == A[i-1] - A[i-2])
{
dp[i] = dp[i-1] + 1;
sum += dp[i];
}
else
dp[i] = 0;
}
return sum;
}