题意:给出一个数组,求其连续子数组(最小长度为3,为等差数列)的个数
思路:用动态规划,用 dp(i)表示到数组索引i时的满足条件的个数,其中i>=3,有dp(i) = dp(i- 1) + cnt(这个表示连续满足两个之差相等的计数)
代码如下:
public class Solution
{
public int numberOfArithmeticSlices(int[] A)
{
if (A.length < 3) return 0;
int len = A.length;
int ans = 0;
int cnt = 0;
for (int i = 2; i < len; i++)
{
if (A[i - 2] - A[i - 1] == A[i - 1] - A[i]) cnt++;
else cnt = 0;
ans += cnt;
}
return ans;
}
}