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作为二维,看哪个小作为一维比较好
posted @ 2019-09-28 19:57  于老师的父亲王老爷子  阅读(10)  评论(0编辑  收藏  举报