#面试题#最长等差数列

来源:互联网 发布:郑州市招聘网网络 编辑:程序博客网 时间:2024/04/29 23:44

#面试题#给定未排序的数组,请给出方法找到最长的等差数列。


分析: 想以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。


代码如下:


原创粉丝点击