Lintcode76 Longest Increasing Subsequence solution 題解

【題目描述】

Given a sequence of integers, find the longest increasing subsequence (LIS).

You code should return the length of the LIS.

給定一個整數序列,找到最長上升子序列(LIS),返回LIS的長度。

【說明】:最長上升子序列的定義:

最長上升子序列問題是在一個無序的給定序列中找到一個儘可能長的由低到高排列的子序列,這種子序列不一定是連續的或者唯一的。

https://en.wikipedia.org/wiki/Longest_increasing_subsequence

【題目鏈接】

www.lintcode.com/en/problem/longest-increasing-subsequence/

【題目解析】

可以使用二分查找法。可以先建立一個數組ends,把首元素放進去,然後比較之後的元素,如果遍歷到的新元素比ends數組中的首元素小的話,替換首元素爲此新元素,如果遍歷到的新元素比ends數組中的末尾元素還大的話,將此新元素添加到ends數組末尾(注意不覆蓋原末尾元素)。如果遍歷到的新元素比ends數組首元素大,比尾元素小時,此時用二分查找法找到第一個不小於此新元素的位置,覆蓋掉位置的原來的數字,以此類推直至遍歷完整個nums數組,此時ends數組的長度就是要求的LIS的長度。

特別注意的是ends數組的值可能不是一個真實的LIS,比如若輸入數組nums爲{4, 2, 4, 5, 3,7},那麼算完後的ends數組爲{2, 3, 5, 7},可以發現它不是一個原數組的LIS,只是長度相等而已。

【參考答案】

www.jiuzhang.com/solutions/longest-increasing-subsequence/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章