#include <iostream>
using namespace std;
int getMaxSubSeq1(int arr[], int len)
{
int ret = 0;
int i = 0, j = 0;
int* pSub = new int[len];
for (i = 0; i < len; i++)
{
pSub[i] = 1;
for (j = 0; j < i; j++)
{
if ((arr[i] > arr[j]) && (pSub[i] < pSub[j]+1))
{
pSub[i] = pSub[j]+1;
if (pSub[i] > ret) ret = pSub[i];
}
}
}
delete[] pSub;
pSub = NULL;
return ret;
}
void main()
{
int i = 0, len = 0;
int test[] = {1, -1, 2, -3, 4, -5, 6, -7, 2};
//int test[] = {1, -1, 2, 3, 4, -5, 6, -7, 2};
//int test[] = {1, -1, 2, 3, 4, 5, 6, 7, 2};
len = sizeof(test)/sizeof(test[0]);
i = getMaxSubSeq1(test, len);
cout << "max len = "<< i << endl;
cin>> i;
}
編程之美 - 數組最長子序列
問題描述:
求一個一維數組的最長遞增子序列,時間複雜度儘可能小。
例如:數組 1, -1,2,-3,4,-5,6,-7它的最長遞增子序列是 1,2,4,6。
思路:
創建一個數組,用於記錄到它爲止遞增元素的最大個數。
從目標數組的第一個元素開始,尋找從數組0元素開始到當前元素中間的遞增的元素個數,並記錄。
時間複雜度 O(N*N)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.