首页 > 其他分享 >最长等差数列

最长等差数列

时间:2023-04-22 22:58:10浏览次数:46  
标签:val nums int mx 等差数列 最长 dp

给你一个整数数组 nums,返回nums中最长等差子序列的长度

一. 动态规划

该题类似最长递增子序列
dp[i][j]定义为以i为结尾,公差为j的最长等差数列长度

class Solution {
public:
    int longestArithSeqLength(vector<int>& nums) {
        //dp[i][j]定义为以i为结尾,公差为j的最长等差数列长度
        int n = nums.size();
        vector<map<int,int>> dp(n);
        int mx = 1;
        for(int i=1;i<n;i++){//对每一个数
            for(int j=i-1;j>=0;j--){//遍历比较之前的数
                int val = nums[i] - nums[j];
                if(dp[i].count(val)!=0)  continue;//相同公差不再计算,关键剪枝语句
                if(dp[j].count(val)) dp[i][val] = max(dp[i][val],dp[j][val]+1);
                else dp[i][val] = 2;
                mx = max(mx,dp[i][val]);
            }
        }
        return mx;
    }
};

标签:val,nums,int,mx,等差数列,最长,dp
From: https://www.cnblogs.com/929code/p/17344342.html

相关文章

  • 1027. 最长等差数列
    给你一个整数数组 nums,返回nums 中最长等差子序列的长度。回想一下,nums的子序列是一个列表 nums[i1],nums[i2],...,nums[ik],且 0<=i1<i2<...<ik<=nums.length-1。并且如果 seq[i+1]-seq[i]( 0<=i<seq.length-1)的值都相同,那么序列 seq 是等差......
  • 【DP】LeetCode 1143. 最长公共子序列
    题目链接1143.最长公共子序列思路分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律在数组的动态规划问题中,一般dp[i]都是表示以nums以前i个元素组成(即nums[i-1])的状态;dp[i][j]分别表示以nums1前i个元素......
  • 力扣——5.最长回文子串(c语言)
    题目描述:给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为1000。示例1:输入:"babad"输出:"bab"注意:"aba"也是一个有效答案。示例2:输入:"cbbd"输出:"bb"1、思路1:动态规划对于一个子串而言,如果它是回文子串,并且长度大于2,那么将它首尾两个字......
  • 【DP】LeetCode 718. 最长重复子数组
    题目链接718.最长重复子数组思路分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律在数组的动态规划问题中,一般dp[i]都是表示以nums以第i个元素组成(即nums[i-1])的状态;dp[i][j]分别表示以nums1前i个元素(......
  • #yyds干货盘点# LeetCode程序员面试金典:最长有效括号
    题目:给你一个只包含'(' 和')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例1:输入:s="(()"输出:2解释:最长有效括号子串是"()"示例2:输入:s=")()())"输出:4解释:最长有效括号子串是"()()"示例3:输入:s=""输出:0代码实现:classSolution{publicint......
  • day52 300.最长递增子序列 | 674. 最长连续递增序列 | 718. 最长重复子数组
    给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是[2,3,7,101......
  • 最长上升子序列
    #include<bits/stdc++.h>usingnamespacestd;/*测试用例:8-710923881*/constintN=1e5+10;intn,a[N];intf[N],idx;//dp数组,idx:下标指针,因为从1开始,也可以理解为个数、LIS的最大长度intpos[N];//p数组,记录原始数组每个数字在dp数组中......
  • B. Tree Tag(贪心+树的最长直径)
    题目B.TreeTag题意思路因为这是一颗树,所以不管怎么追逐,我们都可以理解为在同一条路上追逐(去掉我们不走的路,就是一个线段)首先,如果da>db,显然能追上,进一步,da==db时,因为路径的长度是有限的,也显然可以追上因为树上任意两点的最短路径是固定的,所以a点可以一直朝着b追,而b是......
  • 最长公共子串
    最长公共子串给定两个字符串,求这两个字符串的不包含数字的最长公共子串的长度。输入格式共两行,每行一个由小写字母和数字构成的字符串。输出格式一个整数,表示给定两个字符串的不包含数字的最长公共子串的长度。如果不存在满足要求的非空公共子串,则输出$0$。数据范围输入......
  • LOJ #6564 - 最长公共子序列(bitset 求 LCS)
    怎么全天下就我没见过?被薄纱了/ll还是考虑从朴素的DP入手优化。不难发现对于固定的\(i\),相邻的\(dp_{i,j}\)的差要么是\(0\)要么是\(1\),也就是说从压位的考虑角度可能很有前途。因此我们转而维护\(dp_{i,j}\)的差分数组\(v_{i,j}=dp_{i,j}-dp_{i,j-1}\)。考虑新添加一......