leetcode 1027. 最长等差数列

题意:求最长等差序列的长度,数组长度是[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 };
View Code

猜你喜欢

转载自www.cnblogs.com/ljy08163268/p/11748793.html