最长等距子序列
我有一百万个按排序顺序排列的整数,我想找到连续对之间的差相等的最长子序列。例如 1, 4, 5, 7, 8, 12 有一个子序列 4, 8, 12 我的幼稚方法是贪婪的,只检查从每个点可以扩展子序列多远。这O(n²)似乎需要花费一点时间。 有没有更快的方法来解决这个问题? 更新。我将尽快测试答案中给出的代码(谢谢)。但是,很显然,使用n ^ 2内存将不起作用。到目前为止,还没有代码以输入结尾的代码[random.randint(0,100000) for r in xrange(200000)]。 时机。 我在32位系统上使用以下输入数据进行了测试。 a= [random.randint(0,10000) for r in xrange(20000)] a.sort() ZelluX的动态编程方法使用1.6G RAM,耗时2分14秒。使用pypy只需9秒!但是,由于大输入而导致的内存错误导致崩溃。 Armin的O(nd)时间方法使用pypy花费了9秒,但只有20MB的RAM。当然,如果范围更大的话,情况会更糟。低内存使用率意味着我还可以使用a = [xrange(200000)中r的random.randint(0,100000)进行测试],但是在我给pypy提供的几分钟内,它并没有完成。 为了能够测试Kluev的方法,我重试了 a= [random.randint(0,40000) for r in xrange(28000)] a = list(set(a)) a.sort() 大致列出长度20000。pypy的所有时间 ZelluX,9秒 克鲁夫20秒 阿明52秒 看来,如果ZelluX方法可以做成线性空间,那将是明显的赢家。