最長遞增子串行的長度

2021-07-04 09:59:06 字數 1001 閱讀 5165

對於乙個數字序列,請設計乙個複雜度為o(nlogn)的演算法,返回該序列的最長上公升子串行的長度,這裡的子串行定義為這樣乙個序列u1,u2...,其中ui < ui+1,且a[ui] < a[ui+1]。

給定乙個數字序列a及序列的長度n,請返回最長上公升子串行的長度。

測試樣例:

[2,1,4,3,1,5,6],7
返回:4
採用兩個輔助陣列dp,help,陣列長度均為n.max_length表示最長遞增子串行的長度。

dp[i]表示必須以a[i]結尾的最長遞增子串行的長度,help[i]表示遞增子串行長度為i+1的所有序列中結尾最小的值。其中dp[0]=1,help[0]=a[0].遍歷數字序列a,更改dp,help的值,若dp[i]>max_length,更新max_length的值。最後返回max_length。因為help是排好序的,所以在更新help時查詢a[i]的位置時採用二分搜尋。遍歷陣列+二分搜尋更新,所以時間複雜度是o(nlogn)

例子:其中紅線部分表示更新過程,當插入a[1]=1時,help[0]為2,比1大,所以更新為help[0]=1;當插入a[2]=4時,help[0]=1,比4小,所以更新help[1]=4.重複至遍歷數字序列完成。

}help[left]=a[i];                        //更新help的值

if(left>count)

count=left;

dp[i]=left+1;                     //更新dp的值

if(dp[i]>max_length)       //更新最長遞增子串行的長度

max_length=dp[i];

}return max_length;

}

求序列中最長遞增子串行的長度

include define maxnum 100 函式功能 求解序列中的最大遞增子串行的中包含的元素個數 演算法說明 用到了動態規劃問題,分解子問題b陣列是用來儲存每乙個子串行中的最大遞增子串行 求具有n個元素的序列中的最大遞增自序列問題分解為 a 0 a 0 a 1 a 0 a 1 a 2 a ...

陣列中最長遞增子串行的長度

求陣列中最長遞增子串行的長度 什麼是最長遞增子串行呢?問題描述如下 設l 是n個不同的實數的序列,l的遞增子串行是這樣乙個子串行lin 其中k1 如 在序列1,1,2,3,4,5,6,7中,其最長的遞增子串行為1,2,4,6。其長度為4。對於這個問題有以下幾種解決思路 1 把a1,a2,an排序,假...

LIS最長遞增子串行的長度 個數

給你乙個整數陣列 nums 找到其中最長嚴格遞增子串行的長度。子串行是由陣列派生而來的序列,刪除 或不刪除 陣列中的元素而不改變其餘元素的順序。例如,3,6,2,7 是陣列 0,3,1,6,2,2,7 的子串行。示例 1 輸入 nums 10,9,2,5,3,7,101,18 輸出 4 解釋 最長遞...