最長遞增子串行
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 那麼 遞...