413. Arithmetic Slices 算术切片
413. Arithmetic Slices 算术切片
第一种解法:二维DP
暴力考虑所有长度大于3的切片,这种方法较慢
更好的解法:一维DP
dp[i] 表示以 A[i] 结尾的切片的算术切片个数,在原有的算术切片的基础上再纳入一个新的数字,只会比以前一个结尾的多增加一个算术切片或者没有
int numberOfArithmeticSlices(vector<int>& A) {
int len=A.size();
vector<int> dp(A.size(), 0);
int res=0;
if (len>=3 && A[2]-A[1]==A[1]-A[0]) {
dp[2]=1;
res+=dp[2];
}
for(int i=3;i<len;++i) {
if (A[i]-A[i-1]==A[i-1]-A[i-2]) {
dp[i]=dp[i-1]+1;
}
res+=dp[i];
}
return res;
}#DP