線性DP之最長上公升子串行 LIS

2021-10-07 02:50:50 字數 956 閱讀 4102

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。

示例:輸入: [10,9,2,5,3,7,101,18]

輸出: 4

解釋: 最長的上公升子串行是 [2,3,7,101],它的長度是 4。

說明:可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。

你演算法的時間複雜度應該為 o(n2) 。

高階: 你能將演算法的時間複雜度降低到 o(n log n) 嗎?

題目鏈結

1、動態規劃

複雜度o(n^2)

#include

using

namespace std;

int arr[

10000];

int _max=0;

int help[

10000];

//輔助空間,儲存對應陣列元素的最長遞增子串行

intmain()

}}for(

int i=

0;i) cout<<_max

}

2、貪心+二分

複雜度o(n*log(n))

#include

#include

using

namespace std;

int arr[

10000];

int _max=0;

int inf=

0x3f3f3f

;//極大值

int last[

10000];

//輔助空間,存放遞增子串行長度為當前下標+1的最小元素

int help[

10000];

//輔助空間,儲存對應陣列元素的最長遞增子串行

intmain()

cout<<_max

}

DP之最長上公升子串行

前言 我們先了解一下最長連續遞增子串行的求解!includeusing namespace std 求最長連續遞增序列 define maxn 100000 int n,a maxn dp maxn dp i 即前i個元素的上公升子串行的長度 int main int ans 0 for int i...

DP之最長上公升子串行

def lengthoflis self,nums 處理特殊情況 iflen nums 1 return len nums 儲存 該元素之前 的 最大上公升子串行的長度 mem 1 for in range len nums for j in range 1 len nums 前面的元素都要遍歷一遍...

dp 關於LIS最長上公升子串行

51nod1134 最長遞增子串行 題目鏈結 最近在刷dp的題,感覺很奇妙。玄學遞推22333 本題是求最長上公升子串行,不難得到轉移方程 可以寫出這樣的 include using namespace std int n,a 50010 dp 50010 dp i 代表前i項的最長上公升子串行 i...