解説
N=1 の時,A 自身が等差数列になるので答えは 1 です.
N>1 の時,初項が Ai,第 2 項が Aj(1≤i<j≤N)であるような部分列を考えます.
この部分列が等差数列になるならば,公差は d=Aj−Ai と一意に定まります.
よって,以下のような操作により,初項が Ai,第 2 項が Aj の等差数列であるような部分列のうち長さが最大のものを構成できます.
- 部分列 (Ai,Aj) から始めて k=j+1,…,N の順に Ak が現在の部分列の末尾よりちょうど d 大きければ部分列の末尾に追加する.
i,j,k それぞれについて O(N) の探索を行うことになるので,全体の計算量は O(N3) となります.