最長單調遞增子串行

2021-09-28 16:07:01 字數 612 閱讀 2607

設計乙個o(n2)時間的演算法, 找出由n個數組成的序列的最長單調遞增子串行。

輸入: 第1個整數n(0分析:

用陣列b[0:i]記錄以a[i] (0≤i=a[k],並且 b[k]=max(b[ j]), 1<=j<=i-1

所以:b[i]=b[k]+1.

如果存在k』, b[k』]>b[k] ,並且 a[i]>=a[k』],即

b[i]不是滿足條件的最大值。這與定義矛盾。

因此, 該問題滿足最優子結構性質。

用陣列b[0:i]記錄以a[i] (0≤i即k在0~(i-1)範圍內, 若a[k] ≤a[i], 尋找最大的b[k].

據此將計算b[i]轉化為i個規模更小的子問題。

#define num 100

int a[num];      //序列l

int lis_n2(int n)  ;   //輔助陣列b

int i,j;

b[1] = 1; //以a[1]結尾的子串行中只包含乙個元素

int max = 0;     //陣列b的最大值

for (i=2;i<=n; i++)

return max;

}

最長單調遞增子串行

單調子串行包含有單調遞增子串行和遞減子串行,不失一般性,這裡只討論單調遞增子串行。首先,從定義上明確我們的問題。給定序列a1,a2,an,如果存在滿足下列條件的子串行 ai1 ai2 aim,其中i1即稱為乙個原序列的長度為m的單調遞增子串行,那麼,現在的問題是我們要找出乙個序列的最長的單調遞增子串...

最長單調遞增子串行問題

設計乙個o n2 複雜度的演算法,找出由n個數組成的序列的最長單調遞增子串行。public class lis 儲存資料 int b new int a.length 儲存每個元素的最長單調遞增子串行 int ab new int a.length a.length 儲存每個元素的單調遞增子串行值 ...

求最長單調遞增子串行

問題描述 設計乙個時間的演算法,找出由n個數組成的最長單調遞增子串行。演算法描述 演算法實現 includestruct date void ascorder struct date a,int n 輸出最長單調遞增子串行 找到最長單調遞增子串行開始的單元 int max 0 intfore for...