公告歡迎來到 Larry's notes,近期會持續整理網站。
※ LeetCode, UVa 與 YZUCSE 系列相關文章已從首頁的文章列表中移除。可從首頁的釘選分類瀏覽。
※ LeetCode, UVa 與 YZUCSE 系列相關文章已從首頁的文章列表中移除。可從首頁的釘選分類瀏覽。
UVa - 481 解題紀錄
題目說明
依序給一些數字,找出這些數字的最長嚴格遞增子序列 ( Longest Increasing Subsequence ) 長度及最長嚴格遞增子序列。若有相同長度的 LIS 的話,以選擇後面的元素的 LIS 優先。
Input: 只有一組測資,每行一個整數直到 EOF。
Output: 輸出最長嚴格遞增子序列長度及最長嚴格遞增子序列。
解題思路
基本的 LIS 題目,直接讀取數字同時處理,與先讀取後遍歷陣列的意思相同。
每次讀取 nums[i] 後,先在 seq[] 中找到一個最接近且大於等於 nums[i] 的數,並取得其位置 pos,意義為以 nums[i] 做結尾的 LIS 的最大長度為 pos + 1,L 表示目前能夠找到的最大 LIS 長度,因此若 pos == L,表示以 nums[i] 做結尾的 LIS 是目前能夠找到的 LIS 最大長度,因此更新 lastIdx,由於題目要求,若 pos == L - 1 即以 nums[i] 結尾的 LIS 與目前能找到的最長 LIS 的長度相同,因此也要更新 lastIdx。同時維護 id[] 及 pre[] 最後才能輸出 LIS。
參考解法
1 |
|
參考資料
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Larry's notes!
評論