liuyingbin19222 / leetcode_training

leetcode
0 stars 0 forks source link

求最长等差子序列 #14

Open liuyingbin19222 opened 4 years ago

liuyingbin19222 commented 4 years ago
class Solution {
    private:
        int m;
public:

    int longestArithSeqLength(vector<int>& A) {
        /*
            通过记录差值来求出最长等差子数列;
        */
        m = A.size();
        if(m == 0) return 0;
        vector<unordered_map<int,int>> dp(m);
        // map<int,int> writeMap;
        int ret = 1;
        for(int i = 0;i < m; ++i){
            for(int j = 0;j < i; ++j){
                int dis = A[i] - A[j];
                if(dp[j][dis]) { dp[i][dis] = dp[j][dis] + 1; }
                else  { dp[i][dis] = 2;}
                ret = max(dp[i][dis],ret);      
            }
        }
        return ret;
    }
};
liuyingbin19222 commented 4 years ago

这里面用到的一个数据结构是unordered_map<int,int> 数据结构,unordered_map 数据结构是无序map , 类似于java 中的hash_map , 在空间复杂度方面,小于map ; unordered_map底层实现是红黑树;