動態規劃 求最長遞增子串行

2021-07-11 10:40:44 字數 802 閱讀 3373

題目:給出一段陣列,比如[1,3,5,2,4,6,7,8],得到的最長為1,2,4,6,7,8。

思路:利用dp陣列來解決這個問題,dp[i]表示0…i之間最長的子串行的長度。

dp的求法如果a[i]>a[j],dp[i]=math.max(dp[i],dp[j]+1);首先求出dp的**如下:

private

static

int getdp(int arr)

for (int i = 0; i for (int j = i-1; j >= 0; j--) }}

return dp;

}

求出dp陣列後,有上述的例子的求出:

原陣列:1 3 5 2 4 6 7 8

dp陣列:1 2 3 2 3 4 5 6

我們可以根據我們的dp陣列反推出我們的子串行,首先找到最大的數字所在的位置,這裡是8也就是我們最後乙個數字,然後我們繼續往前早,找到比最大乙個數字小一(也就是6-1找5)的位置,而且必須要滿足當前數字小於我們序列最長位置的數字。我們每找到乙個就記錄下來。這裡我們建立結果陣列的時候,必須要確定大小,大小就是我們dp陣列中最大的值。**如下:

private

static

int gen(int arr,int dp)

}int lis=new

int[len];

lis[--len]=arr[index];

for(int i=index;i>=0;i--)

}return lis;

}

動態規劃求最長遞增子串行

注意 序列 和 串 這兩個名詞的區別,串 定是連續的,序列不 定是連續的。思路 dp i 表示以i結尾的最長上公升子串行的長度。遍歷前面所有的數,對於小於nums i 的nums j 都可以有上公升子串行長度 dp i dp j 1 取最優的結果 dp i max dp i dp j 1 int l...

動態規劃 最長遞增子串行

給出序列 1 2 3 4 2 5 3 4 a 1 1,a 2 2,a 7 3,a 8 4 求其最長的遞增子串行,以上最長遞增子串行為 1 2 3 4 5 問題細分 初始化條件f 1 1,序列只有1個長度即為1 f 2 a 2 與下標小於2的比較,即a 1 比較,a 2 a 1 因此更新f 2 f 1...

動態規劃 最長遞增子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度 例項 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行為 2,3,7,101 長度為4說明 可能會有多種最長上公升子串行的和,只需要輸出對應長度即可 演算法的時間複雜度應為o n2 首先,dp陣列的定義如下 dp...