【题目】1055 最长等差数列
【题意】给定大小为n的互不不同正整数集合,求最长等差数列的长度。\(n \leq 10000\)。
【算法】动态规划
两个数之间的差是非常重要的信息,设\(f_{i,j}\)表示以i和j开头的最长等差数列长度,初始化为2,那么:
\[f_{i,j}=f_{j,k}+1 \ \ , \ \ |A_i-A_j|=|A_j-A_k|\]
怎么快速找i,j,k?从后往前枚举j,然后双指针i和k向两边移动判断即可。
复杂度\(O(n^2)\)。
注意:这题卡时间和空间,f数组必须用short int来存储(2 Byte,32767)。