例如
vector origin,因為最長連續遞增序列是 。所以最長連續遞增子串行個數是5 。
思路都在**裡面:
#include
#include
#include
#include
using
namespace std;
//動態規劃
//狀態定義
//dp[i] 代表以a[i]結尾的最長遞增子串行長度
//狀態轉移
//if(a[i]>a[i-1]) dp[i] = dp[i] +1;
//else dp[i] = 1;
//初始化
//dp[i] = 1;
//返回值
//求出dp陣列的最大值
//求最長子序列
class
solution
int longestvalue =1;
vector<
int>
dp(origin_v.
size()
,0);
dp[0]
=1;for
(int i=
1;i< origin_v.
size()
;i++
)else
longestvalue =
max(longestvalue, dp[i]);
//這就代表現在這個元素已經加入進去了
}return longestvalue;}}
;int
main()
; cout<<
"最大長度為"
(origin)
;}
思考:如果題目求最長連續遞增子串行,那麼辦呢?
如果我們需要知道 最長連續遞增子串行。例如vector origin,最長連續遞增序列就是 。
但是在現在這個**中,我們至少需要再新增兩個陣列進行儲存。乙個是結果儲存temp2,乙個是每次dp[i]=1的時候,重新儲存的temp1。每次dp[i]=1時,先將temp2與temp1進行比較,將元素個數多的重新複製給temp2 ,然後temp1.clear()。然後重新向temp1中新增新元素。如此反覆。。。。陣列遍歷完,取temp2就可以了。
動態規劃 最長遞增子串行和最長連續遞增子串行
leetcode 674.最長連續遞增序列 題目描述 給定乙個未經排序的整數陣列,找到最長且 連續遞增的子串行,並返回該序列的長度。連續遞增的子串行 可以由兩個下標 l 和 r l r 確定,如果對於每個 l i r,都有 nums i nums i 1 那麼子串行 nums l nums l 1 ...
動態規劃 最長遞增子串行
給出序列 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...