1027. Longest Arithmetic Sequence
这道题其实很简单粗暴,但是需要注意一些地方:
class Solution {
public:
int longestArithSeqLength(vector<int>& A) {
int sz = A.size();
vector<unordered_map<int, int>> dp(sz, unordered_map<int, int>());//注意这里使用一维里面存map来代替二维的做法,因为需要快速查找,并且节省空间,并且就算想要用二维,另一个维度为多少也不是特别清楚。
int ret = 0;
for (int i = 0; i < sz; ++i) {
for (int j = i-1; j >= 0; --j) {
dp[i][A[i] - A[j]] =max(dp[i][A[i] - A[j]], dp[j].count(A[i] - A[j])? dp[j][A[i] - A[j]] + 1 : 2);//注意这里的max,因为可能会变小
ret = max(ret, dp[i][A[i] - A[j]]);
}
}
return ret;
}
};
//另外,需要注意另外一个思路:这里是index作为一维,diff作为“二维”
//也可以使用diff作为一维,index作为二维,看哪个小作为一维比较好