暂且称为dp吧,实际上是一点dp的影子都没有
法一:简单说就是找出序列中的所有等差数列,但是注意的是要是最少元素为3的序列同时还不一定是连续的。有可能前半部分和后半部分的差不同。
public int numberOfArithmeticSlices(int []nums){
int result=0;
int temp=0;
for(int i=1;i<nums.length-1;i++){
if(nums[i]-nums[i-1]==nums[i+1]-nums[i])){
temp++;
}else {
result+=(temp*(temp-1)/2);
temp=0;
}
}
//假如一直持续到末尾的时候根本就没有else的情景
result+=(temp*(temp-1)/2);
return result;
}
法二 掏出重要的一击,假装是dp的样子
public int numberOfArithmeticSlices(int[] A) {
int sum = 0;
int tmp = 0;
int n = A.length;
int []dp=new int[n];
for(int i=1 ; i < n - 1 ;i ++ ){
if( A[i-1]-A[i] == A[i]-A[i+1] ){
dp[i]=dp[i-1]+1;
}
sum+=dp[i];
}
return sum;
}
如何寻找的等差数列