Skip to content

Commit

Permalink
Update Readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
wisdompeak authored Jan 15, 2022
1 parent 82b5c06 commit 5f15b5d
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions Hash/446.Arithmetic-Slices-II-Subsequence/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

核心代码如下:
```cpp
vector<unorderd_map<int,int>>DP(N);
unorderd_map<int,int>DP[1000];
int count = 0;
for (int i=0; i<N; i++)
for (int j=0; j<i; j++)
Expand All @@ -30,15 +30,15 @@ for (int i=0; i<N; i++)
return count;
```
这个思想和```1027.Longest-Arithmetic-Sequence```的解法一致
这个思想和```1027.Longest-Arithmetic-Sequence```的解法一致,时间复杂度是o(N^2).
#### 解法2
一个等差数列,可以通过后两位元素就能唯一确定.所以另一个很常见的DP解法,就是定义状态变量DP[i][j]表示为以元素i,j结尾的等差数列的个数.
我们通过i,j,查找之前是否存在一个索引k使得```A[i]*2=A[k]+A[j]```.如果找到的话那就说明```DP[i][j]+=DP[k][i]+1```。其中```DP[k][i]+1```的意思是:以i,j为结尾的等差数列,大部分可以由以k,i为结尾的等差数列延长而来(多加上一个A[i]而已),但还多出来的一个就是仅含有k,i,j三个元素的等差数列。另外,这里为什么是```+=```而不是```=```,那是因为这样的k可能会有好几个(对应相同的A[k]值).
想通过A[k]值找到k,需要提前处理,用到一个一对应多的hash表unordered_map<int,vector<int>>Map.
想通过A[k]值找到k,需要提前处理,用到一个一对应多的hash表unordered_map<int,vector<int>>Map. 注意这种解法的时间复杂度是o(N^3).
[Leetcode Link](https://leetcode.com/problems/arithmetic-slices-ii-subsequence)

0 comments on commit 5f15b5d

Please sign in to comment.