最長遞增子串行B

2021-07-15 22:54:09 字數 1180 閱讀 3608

牛客網--完美世界筆試原題

給定乙個長度為n的陣列,找出乙個最長的單調自增子序列(不一定連續,但是順序不能亂)

例如:給定乙個長度為8的陣列a,則其最長的單調遞增子串行為,長度為6.

輸入描述:

第一行包含乙個整數t,代表測試資料組數。

對於每組測試資料:

n-陣列的長度

a1 a2 ... an (需要計算的陣列)

保證:1<=n<=3000,0<=ai<=max_int.

輸出描述:

對於每組資料,輸出乙個整數序列,代表最長遞增子串行。

若有多組最長上公升子串行,輸出第一組。

保證:1<=t<=20,1<=n<=3000,0<=ai<=max_int.

輸入例子:

2

789 256 78 1 46 78 8

56 4 8 2 17

輸出例子:

1 46 78

6 8 17

首先得到每個元素位置對應的當前最長遞增子串行陣列。儲存長度以及其上乙個元素索引。

參考: 求最長遞增子串行長度

#include #include #include #include using namespace std;

struct node

};vectormaxsubsequence(vector&arr)

if (dp[i].maxlen > maxlen)

}//if

}//for

}//for

//填充結果

vectormaxret(maxlen, 0);

for (int i = maxidx; maxlen >0 && i >= 0; )

return maxret;

}int main()

//for

vectorret = maxsubsequence(arr);

cout << ret[0];

for (unsigned int j = 1; jcout << " " << ret[j];

cout << endl;

} system("pause");

return 0;

}

最長遞增子串行

這是微軟實習生筆試遇到的,題意 求乙個陣列中最長遞增子串行的長度。要求選擇該題最好演算法的時間複雜度和空間複雜度。答案 時間複雜度o nlgn 空間複雜度o n 這題明顯用動態規劃來解。假設在目標陣列array 的前i個元素中,以array i 元素為最大元素的遞增子串行的長度是lis i 那麼 遞...

最長遞增子串行

最長遞增子串行又叫做最長上公升子串行 子串行,正如lcs一樣,元素不一定要求連續。本節討論實現三種常見方法,主要是練手。題 求乙個一維陣列arr i 中的最長遞增子串行的長度,如在序列1,1,2,3,4,5,6,7中,最長遞增子串行長度為4,可以是1,2,4,6,也可以是 1,2,4,6。方法一 d...

最長遞增子串行

最長遞增子串行 求乙個字串的最長遞增子串行 如 dabdbf最長遞增子串行就是abdf,長度為4 這是一道基本的動態規劃求解的題目,與此類似的還有 最長公共子串行 分析 用一維陣列dp i 來儲存以a i 為末元素的最長遞增子串行的長度,那麼dp i 至少為1 即包含它本身 往前尋找,如果存在a j...