最长等差子序列

该博客介绍了如何在未排序的数组中找到最长的等差数列,无需保证数字顺序。通过将数组排序,然后应用特定算法,可以找到最长等差子序列,例如在给定数组1, 4, 2, 5, 3中,最长等差数列长度为5。解题思路参考了LeetCode 1027题的解法和相关文章。" 112607114,7386505,理解C++中的哈希表与哈希冲突解决,"['数据结构', 'C++', '算法', '哈希', '数据存储']
摘要由CSDN通过智能技术生成

给定一个未排序的数组,找出其中最长的等差数列(注意:不需要保证数字的顺序)

输入:

N:数组中元素的个数,其中N<10000000

数组中各个元素:如1 4 2 5 3

输出:

等差序列长度:如上面数组输出的结果为 5

解题思路:

leetcode 1027题的思路,如https://blog.csdn.net/qq_32424059/article/details/89301300,或者https://www.jianshu.com/p/62d3d87495dd

需要注意的是我们这里不需要保证数字的顺序,那么我们可以把杂乱的数组的元素进行按照从大到小的方法进行排序(一定是从大到小,不然下面的代码差值存在负数)。那么首先我们上代码看看

二维DP, 用dp[i][d]表示以下标i结尾,公差为d的子序列的长度。

注意公差可能是负数,所以要+10001把它变正。

#coding:utf-8
import sys

#方法1
def longestArithSeqLength(n,N, A):
    res = 1
    dp = [[1] * n for j in range(N)]
    for i in range(1, len(A)):
        for j in range(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值