leetcode 1027:Longest Arithmetic Sequence
题意:给你一个数组A,求这个数组子序列中中最长等差序列,返回长度。
数组长度是[0,2000],数值长度是[0,10000]。
思路:简单DP吧。dp[i][j]表示的是以第i个数结尾,差是j的最大长度。
dp[i][A[i] - A[j]] = max(dp[i][A[i] - A[j]],dp[j][A[i]-A[j]]+1);
代码:
class Solution {
public:int longestArithSeqLength(vector<int>& A) {vector<map<int,int>>dp(2002);for (int i = 0; i < A.size(); i++)for (int j = i+1; j < A.size();j++)dp[i][A[j] - A[i]] = 1;int ans = 0;for (int i = 1; i < A.size(); i++){for (int j = 0; j < i; j++){if (dp[j][A[i] - A[j]] != 0){dp[i][A[i] - A[j]] = max(dp[i][A[i] - A[j]],dp[j][A[i]-A[j]]+1);ans = max(ans, dp[i][A[i] - A[j]]);}}}return ans;}
};