题目
如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。
例如:
以下数列为等差数列:
1, 3, 5, 7, 9
7, 7, 7, 7
3, -1, -5, -9
以下数列不是等差数列:
1, 1, 2, 5, 7
破题
最直接的方法:
很容易知道A[P] ~ A[Q]是等差数列的前提是A[P] ~ A[Q-1]也是等差数列,并且A[Q] - A[Q - 1] = d(公差)。按照数学的角度讲,只有一个数字和有两个数字的数列也是等差数列,但是题目中要求包含三个元素。
解题
class Solution {
public int numberOfArithmeticSlices(int[] A) {
int length = A.length;
if(length < 3)
return 0;
//dp[p][q] == true 表示A[P]~A[Q]为等差数列
boolean[][] dp = new boolean[length][length];
int count = 0;
for(int q = 1; q < length; q++){
for(int p = 0; p < q; p++){
//只有两个数字或三个数字成等差是等差数列
if(q - p <= 1 ||(dp[p][q - 1] && A[q] - A[q - 1] == A[q - 1] - A[q - 2])){
dp[p][q] = true;
if(q - p >= 2)
count++;
}
}
}
return count;
}
}
来源:CSDN
作者:陈伊航
链接:https://blog.csdn.net/weixin_45390066/article/details/103479540