給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。
示例:輸入: [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...