[Leetcode446]Arithmetic Slices II - Subsequence

1 Arithmetic Slices
在等差数列的简单算法中,思路的重点就是对于符合等差的数列的扩展的数字游戏

以[2 4 6 8 10]为例子
  1. 前三位
    24 6为最短的等差数列 且只有dp =1

考虑8
2 4 6 8在上面等差数列扩展了一位,那么这一位的增加,等差数列可选
2 4 6 8 对 2 4 6的位数延长
4 6 8 增加的一个等差数列
所以为2

那么最后的等差数列就是 1+2=3;

2.Arithmetic Slices II - Subsequence
但是在变形体中,发现等差数列不仅下标相差1,而且可以随意从小到大去数字构建等差数列。
当然还是动态规划问题
但重点是怎么构建动态规划的递归方程。

考虑dp[i][diff]+=dp[j][diff]+1;

重点在于dp[i][diff]表示在0~i的所有数字中公差为diff的数字有多少个。

PS: diff=A[i]-A[j];

那么从图像看一下
2
4 2->1
6 4->1 2->2(公差为4的数字一共2个)
8 6->1 4->1 2->3
10 8->1 6->1 4->2 2->4
然后所有的项-1然后求和
1+2+1+3=7

你可能感兴趣的:([Leetcode446]Arithmetic Slices II - Subsequence)