給定一個未排序數組, 找出其中最長的等差數列

轉載請註明來自souldak,微博:@evagle

題目如題所訴:其實就是前面那篇leetcode 最長連續序列 longest consecutive sequence 的升級版

leetcode上的題目是要求等差爲1,即連續序列,而現在把等差爲1的限制條件去掉,找最長的等差數列,做法和複雜度卻升級了。

現在給出一個O(n^2)的算法:


算法思路:

先排序,O(NlogN)
從後往前,對於a[i],令 j=i+1~n-1
map[pair(a[i],a[j]-a[i])] = max(map[pair(a[j]-,a[j]-[a[i])] , 1) + 1 
其中pair(a,b)表示以a爲首項,b爲等差的等差數列的最長的長度
從a[n-1]一直算到a[0],所有的pair(a[k],b)都算出來了,現在只要找出其中最大的即可。

按着這個思路,代碼實現也比較簡單,就不上代碼了。

發佈了56 篇原創文章 · 獲贊 3 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章