当前位置: 代码迷 >> 综合 >> Leetcode 1027. 最长等差数列(DAY 45) ---- 动态规划学习期
  详细解决方案

Leetcode 1027. 最长等差数列(DAY 45) ---- 动态规划学习期

热度:95   发布时间:2023-11-17 20:10:10.0

文章目录

    • 原题题目
    • 代码实现(首刷小部分看解大部分自解)
    • 代码实现(二刷自解 DAY185 C++)


原题题目


在这里插入图片描述


代码实现(首刷小部分看解大部分自解)


int longestArithSeqLength(int* A, int ASize){
    int* dp[ASize],i,j,max = 0,temp;for(i=0;i<ASize;i++){
    dp[i] = (int*)malloc(sizeof(int) * 20001);memset(dp[i],0,sizeof(dp[i]));}for(i=1;i<ASize;i++){
    for(j=0;j<i;j++){
    temp = A[i] - A[j] + 10000;dp[i][temp] = fmax(dp[i][temp],dp[j][temp]+1);max = fmax(dp[i][temp],max); }}return max+1;
}

代码实现(二刷自解 DAY185 C++)


class Solution {
    
public:int longestArithSeqLength(vector<int>& nums) {
    vector<vector<int>> dp(nums.size(),vector<int>(20001,0));int ret = 0;for(int i=1;i<nums.size();++i){
    for(int j=i-1;j>=0;--j){
    int dif = 10000+nums[i]-nums[j];dp[i][dif] = max(dp[j][dif] + 1,dp[i][dif]);ret = max(ret,dp[i][dif]);}}return ret+1;}
};