一,題目
求乙個陣列的最長遞減子串行
比如的最長遞減子串行為
求乙個陣列的最長遞增子串行 比如
的最長遞減子串行為
二,遞增序列長度求解方法
解法一:
時間複雜度為 o(n^2)
遍歷陣列序列,每遍歷乙個陣列元素,則求序列到當前位置 最長的遞增序列數,用temp[i]儲存。
注意,當前的最長遞增子串行受已經遍歷的最長遞增子串行影響,從序列頭 再遍歷到當前位置的前乙個位置,挨個比較 a[j]與a[i](當前元素)大小,遇到小於a[i
]且判斷需要更新
temp[]陣列。
由於這裡僅僅是求,最長遞增序列的長度,所以僅僅用temp[]儲存長度大小。
原始碼:#include using namespace std;
int lis(int array,int n)
} }
int max=temp[0];
for(int k=0;k
為了減少比較次數
採用空間換時間的策略。新增乙個陣列maxv[],max[i]表示所有長度為i的遞增子串行中最大值之間的最小值
nmaxlax記錄當前最長子序列
每次遍歷乙個元素時候,從最長子序列開始遍歷,一直到1 比較當前元素值arr[i] 跟maxv[j]的值,從而更新temp[]最長子序列和nmaxlax和maxv[]的值
原始碼:#include using namespace std;
int lis(int array,int n)
}if(temp[i]>nmaxlis)//在最長子序列時停止 (這時只有乙個最長的)
int resultlen=indexlen;
for (int i=nlen;i>=0;i--)//記錄最長遞減子串行
}for (int i=0;i0);
int start=0;
int end=nlen-1;
while (start<=end)
{ int mid=(start+end)/2;
if(ntarget>a[mid])
end=mid-1;
else if(ntarget
最長遞減子串行 微軟面試100題 第四十七題
題目要求 求乙個陣列的最長遞減子串行 比如的最長遞減子串行為。實現 1 動態規劃,時間複雜度o n 2 include using namespace std const int n 8 int lis int a,int n int main void cout lis a,n endl retu...
第四十七題(求最長遞減子串行)
題目 求乙個陣列的最長遞減子串行比如的最長遞減子串行為 動態規劃經典題目。c includeusing namespace std namespace ms100p 47 的最長遞減子串行為 void printarray int dp,int data,int k int finddecrease...
LeetCode第四十七題 Python實現
title leetcode no.47 categories tags 給定乙個可包含重複數字的序列 nums 按任意順序 返回所有不重複的全排列。示例 1 輸入 nums 1,1,2 輸出 1,1,2 1,2,1 2,1,1 示例 2 輸入 nums 1,2,3 輸出 1,2,3 1,3,2 2...