上升子序列

找到第一个比x大的,更新那个值,记录更小的tail

Reference: (Leetcode 300)(https://leetcode.com/problems/longest-increasing-subsequence/discuss/74824/JavaPython-Binary-search-O(nlogn)-time-with-explanation)
This commit is contained in:
Lin Zhu 2018-09-23 10:55:46 -04:00 committed by GitHub
parent e89b0aab31
commit 5eaf1daec1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2781,7 +2781,7 @@ return ret;
定义一个 tails 数组,其中 tails[i] 存储长度为 i + 1 的最长递增子序列的最后一个元素。对于一个元素 x 定义一个 tails 数组,其中 tails[i] 存储长度为 i + 1 的最长递增子序列的最后一个元素。对于一个元素 x
- 如果它大于 tails 数组所有的值,那么把它添加到 tails 后面,表示最长递增子序列长度加 1 - 如果它大于 tails 数组所有的值,那么把它添加到 tails 后面,表示最长递增子序列长度加 1
- 如果 tails[i-1] < x <= tails[i]那么更新 tails[i-1] = x - 如果 tails[i-1] < x <= tails[i]那么更新 tails[i] = x
例如对于数组 [4,3,6,5],有: 例如对于数组 [4,3,6,5],有: