#面试题#给定未排序的数组,请给出方法找到最长的等差数列。
分析: 想以O(n^2)的复杂度计算出任意两个位置的数字差。用hash数组存储:
比如1 3 2 4 5 的 hash统计结果为: (注意都是位置)
差为1: (1,3) (2, 4) (4, 5)
差为2: (1,2) (3, 4) (2, 5)
差为3: (1, 4) (2, 5)
差为4: (1, 5)
之后 对每一条链表 遍历,用dp数组统计最长等差数列
比如 用第一个链表举例: 初始 dp = {1, 1, 1, 1, 1}
遇到(1, 3) 则dp[3] = dp[1] + 1 dp = {1, 1, 2, 1, 1}
遇到(2, 4) 则dp[4] = dp[2] + 1 dp = {1, 1, 2, 2, 1}
遇到(4, 5) 则dp[5] = dp[4] + 1 dp = {1, 1, 2, 2, 3}
最长等差数列 即为 3。
代码如下:
#include
#include
#include