举例
思路
比如 :
我有一个计数最终答案res
1 2 3 满足条件
继续循环下一个 dp[2]=dp[1]+1=0+1=1 res=1
2 3 4 满足条件
继续循环下一个 dp[3]=dp[2]+1=1+1=2 res=3
3 4 5 满足条件
继续循环下一个 dp[4]=dp[3]+1=2+1=3 res=6
重点就是他把右边界锁住了,然后左边取子集的感觉,然后累加
就像差分递推那样。
public int numberOfArithmeticSlices(int[] nums) {
int len=nums.length;
if(len<3){
return 0;
}
int res=0;
int [] dp =new int[len];
for (int i=2;i<len;i++){
if(nums[i]-nums[i-1]==nums[i-1]-nums[i-2]){
dp[i]=dp[i-1]+1;
res+=dp[i];
}
}
return res;
}