【leetcode每日一题】1027. 最长等差数列

简介: 【leetcode每日一题】1027. 最长等差数列

刚开始一时半会没想出来,不过看了题解才恍然大悟,感觉对二维的动态规划还是挺不熟悉的,还得加强练习

题解如下

class Solution {
public:
    int longestArithSeqLength(vector<int>& nums) {
        int n = nums.size();
        int f[n][1001];
        memset(f,0,sizeof(f));
        int ans = 0;
        for(int i = 1;i < n; i++){
            for(int k = 0;k < i; k++){
                int j = nums[i] - nums[k] + 500;
                f[i][j] = max(f[i][j],f[k][j]+1);
                ans = max(ans,f[i][j]);
            }
        }
        return ans + 1;
    }
};

规划递推式为

f[i][j] = max(f[i][j],f[k][j]+1);

j为公差,每个对应的元素都有相应从0到自身值的公差数组,dp本质是空间换时间,本题思想就是求出每个元素对应的公差数组的最长值,然后再递推ans,再输出就好了。

相关文章
|
13天前
Leetcode第38题(外观数列)
LeetCode第38题要求生成外观数列的第n项,该数列从数字1开始,每一项都是对前一项的描述,例如第1项是"1",第2项是"11",第3项是"21",以此类推。
22 0
|
2月前
|
存储
LeetCode------斐波那契数列(2)
这篇文章提供了解决LeetCode上"斐波那契数列"问题的两种方法:一种是使用备忘录模式通过递归计算并存储结果以避免重复计算,另一种是自底向上的迭代方法,同时要求结果对1e9+7取模。
LeetCode------斐波那契数列(2)
|
5月前
leetcode-38:外观数列
leetcode-38:外观数列
38 0
|
算法 安全 Swift
LeetCode - #38 外观数列
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
LeetCode - #38 外观数列
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
|
Java C语言
LeetCode刷题计划——单调数列
LeetCode刷题计划——单调数列
|
存储 Python
LeetCode 38. 外观数列
给定一个正整数 n ,输出外观数列的第 n 项。
94 0
LeetCode 1502. 判断能否形成等差数列
如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。
100 0
LeetCode 665.非递减数列
LeetCode 665.非递减数列
98 0
LeetCode 665.非递减数列
|
算法
LeetCode 38外观数列&39组合总和
给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。
102 0
LeetCode 38外观数列&39组合总和