File tree Expand file tree Collapse file tree 1 file changed +1
-1
lines changed
Hash/446.Arithmetic-Slices-II-Subsequence Expand file tree Collapse file tree 1 file changed +1
-1
lines changed Original file line number Diff line number Diff line change 6
6
7
7
搜索不成的话,DP是个很常规的替代方案.考虑到本题是求方案的数量,所以DP解法的嫌疑就更大了.最常见的DP套路,就是考察待求的状态量``` DP[i] ``` 与之前的状态量``` DP[j] ``` 之间的推导关系,这里的``` DP[i] ``` 不妨就设计为题意要求的以元素``` j ``` 结尾的的等差数列的个数.
8
8
9
- 如果``` i ``` 是等差数列的最后一个,那么它之前的一个元素是什么呢?那么``` j=0~i-1 ``` 都是有可能的,只要元素``` j ``` 是某个相同公差的等差数列的结尾元素.如果是的话,显然``` DP[i]+=DP[j] ``` .由此,我们看到一个重要的因素,那就是公差``` diff ``` .也就是说,判断``` j ``` 是否和``` i ``` 构成等差数列的条件,就是先计算``` diff=A[j]-A[i] ``` ,然后再考察``` j ``` 是否为一个公差为``` diff ``` 的等差数列的尾项.于是我们还需要在DP数组中给A的每个元素开辟一个Hash,用来存储它所涉及的公差.
9
+ 如果``` i ``` 是等差数列的最后一个,那么它之前的一个元素是什么呢?那么``` j=0~i-1 ``` 都是有可能的,只要元素``` j ``` 是某个相同公差的等差数列的结尾元素.如果是的话,显然``` DP[i]+=DP[j] ``` .由此,我们看到一个重要的因素,那就是公差``` diff ``` .也就是说,判断``` j ``` 是否和``` i ``` 构成等差数列的条件,就是先计算``` diff=A[j]-A[i] ``` ,然后再考察``` j ``` 是否为一个公差为``` diff ``` 的等差数列的尾项.于是我们还需要在DP数组中给A的每个元素开辟一个Hash,用来存储它所涉及的公差.
10
10
11
11
核心代码如下:
12
12
``` cpp
You can’t perform that action at this time.
0 commit comments