Leetcode413. 等差数列划分(C语言)
算法-动态规划:算法与数据结构参考
题目:
如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例:
输入:[1,2,3,4]
输出:3
思路:
动态规划。计算后面的差值与第一个差值作比较,若相等,dp计数;用count累加计算出所有的等差数列数值(连续)。
代码:
int numberOfArithmeticSlices(int* A, int ASize){
if(ASize<3) return 0;
int count=0,dp=0,dp1=A[1]-A[0];
for(int i=2;i<ASize;i++){
int dp2=A[i]-A[i-1];
if(dp2==dp1){
dp++; //后面dp个间隔相同的
count+=dp;
}
else dp=0; //无间隔相同,断开
dp1=dp2; //更新初始间隔
}
return count;
}