动态规划:dp数组中记录的是,等差数列的长度,即当前位置与当前位置之前的所有位置的差的等差数列长度
所以在定义dp数组时,应该将所有长度都置为1;
我们遍历当前位置,以及当前位置之前所有位置的差,和此差的长度,当前位置在之前遍历的位置上+1;
所以dp数组为:dp[i][d] = dp[j][d]+1; 此处i为当前位置j为i之前的所有位置举例,而dp[i][d] 则是当前位置的差为d的等差数列的长度
class Solution {
public:
/*dp数组中记录的是,等差数列的长度,即当前位置与当前位置之前的所有位置的差的等差数列长度
所以在定义dp数组时,应该将所有长度都置为0;
我们遍历当前位置
*/
int longestArithSeqLength(vector<int>& nums) {
int n = nums.size();
int result = 0;
vector<vector<int>> dp(n,vector<int>(1024,1));
// 遍历所有
for(int i=0;i<n;i++){
// cout<<nums[i]<<endl;
for(int j=0;j<i;j++){
// cout<<nums[j]<<endl;
int d = nums[i] - nums[j] +500;
dp[i][d] = dp[j][d]+1;
result = max(result,dp[i][d]);
}
}
return result;
}
};