最長遞增子串行!!!(DP ,二分)

2021-06-28 21:09:02 字數 1026 閱讀 8108

最長遞增子串行

time limit: 1000 ms

memory limit: 32768 k

total submit: 158(64 users)

total accepted: 68(56 users)

rating:

special judge: no

description

給出乙個數字序列求其最長的遞增子串行例如序列(1,7,3,5,9,4,8).

(1,7)和(3,4,8)是其遞增子串行但其最長的遞增子串行是(1,3,5,8)。

input

本題有多組測試資料,對於每組測試資料第一行是乙個整數n(n<=100)代表序列長度。

第二行是n個整數。

output

最長遞增子串行長度

sample input

7 1 7 3 5 9 4 8

sample output

4對於這個題目,我只能說是水題。但是有點坑!!

我使用了兩種方法解決這個題目 :

1.dp

2.二分法

我一開始也不知道還能使用二分法,但是通過後面學習和細心被別人指導,發現這個可以使用二分法的

對於dp的解決是,

dp[i] = max(dp[i],dp[j]+1)  前提條件是  arr[i] > arr[j]

**如下:

後來我花了點時間,在使用二分法解決這個問題 :

二分法的思想就是在插入的時候要使用二分查詢,看能插入到**,時間複雜度為 o(nlog(n))

時間也很小了 

**如下 :

由於二分法是我想出來的,所以我沒有進行過特別**的資料,以後我要是能發現比我這個還要好的,我就把他的那個學習一下。

dp 最長遞增子串行 (LIS)

首先引出乙個例子 問題 給你乙個長度為 6 的陣列 陣列元素為 則其最長單調遞增子串行為 並且長度為 5 分析 題目所要找的遞增子串行 想想有什麼特點呢 是不是會發現 所有的遞增序列 前乙個數一定小於後乙個數 並且如果給所有從小到大的數標號 會得到一串遞增的數 既然是借助動態規劃分析問題 那麼當前的...

dp 最長單調遞增子串行LIS

解題關鍵 如果將子串行按照長度由短到長排列,將他們的最大元素放在一起,形成新序列 b left ldots ldots right 則序列 b 滿足 ldots ldots 這個關係比較容易說明,假設 表示序列a中長度為 x 的遞增序列中的第 y 個元素,顯然,如果在序列 b 中存在元素 且 m n...

最長遞增子串行

這是微軟實習生筆試遇到的,題意 求乙個陣列中最長遞增子串行的長度。要求選擇該題最好演算法的時間複雜度和空間複雜度。答案 時間複雜度o nlgn 空間複雜度o n 這題明顯用動態規劃來解。假設在目標陣列array 的前i個元素中,以array i 元素為最大元素的遞增子串行的長度是lis i 那麼 遞...