题意:求最长等差序列的长度,数组长度是[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);
1 class Solution { 2 public: 3 int longestArithSeqLength(vector<int>& A) { 4 vector<unordered_map<int,int>>dp(2002); 5 for(int i=0;i<A.size();i++){ 6 for(int j=i+1;j<A.size();j++){ 7 dp[i][A[j]-A[i]]=1; 8 } 9 } 10 int ans=0; 11 for(int i=1;i<A.size();i++){ 12 for(int j=0;j<i;j++){ 13 if(dp[j][A[i]-A[j]]!=0){ 14 dp[i][A[i] - A[j]] = max(dp[i][A[i] - A[j]],dp[j][A[i]-A[j]]+1); 15 ans = max(ans, dp[i][A[i] - A[j]]); 16 } 17 } 18 } 19 return ans; 20 } 21 };
原文地址:https://www.cnblogs.com/ljy08163268/p/11748793.html
时间: 2024-10-10 08:05:10