求最長的遞增數(shù)列(Longest Increasing sequence, LIS)是一個(gè)比較常見的問題。
給定數(shù)列 10, 22, 9, 33, 21, 50, 41, 60, 80,那么 LIS 為 10, 22, 33, 50, 60, 80
分析思路: 假定 array[0, 。.n-1]為輸入數(shù)據(jù), LIS[i]為array[0, 。。.i-1]時(shí)的LIS (i 》0, i《= n),并且 array[i]是 LIS[i]的最后一個(gè)元素。
那么,LIS(i) = {1 + max(LIS(j))}, 其中, j 《 i, array[j] 《= array[i]。
如果沒有滿足條件的j,LIS(i) = 1
方法1: 使用遞歸函數(shù)。
顯然,這是一個(gè)時(shí)間復(fù)雜度高的方法,很多函數(shù)重復(fù)調(diào)用了。
方法2:把中間結(jié)果保下來,避免重復(fù)計(jì)算:
-
算法
+關(guān)注
關(guān)注
23文章
4710瀏覽量
95405 -
C語言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141800 -
遞增
+關(guān)注
關(guān)注
0文章
3瀏覽量
6736
發(fā)布評論請先 登錄
10個(gè)經(jīng)典的C語言面試基礎(chǔ)算法及代碼
關(guān)于10大C語言基礎(chǔ)算法
C語言教程之求100~200之間的素?cái)?shù)
C語言算法之比賽求平均分

評論