Update 300. Longest Increasing Subsequence.md

This commit is contained in:
ShusenTang 2020-07-30 12:18:26 +08:00 committed by GitHub
parent bcb6cde23e
commit 6d804fdead
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -27,7 +27,7 @@ for all j in [0, i-1]:
``` ```
为什么要选末尾元素最小的呢,是因为在长度一定的情况下,末尾元素最小的是未来最有可能成为最长序列的候选人。这样,每来一个新的数, 为什么要选末尾元素最小的呢,是因为在长度一定的情况下,末尾元素最小的是未来最有可能成为最长序列的候选人。这样,每来一个新的数,
我们便按照以下规则更新这些序列: 我们便按照以下规则更新这些序列:
1. 如果nums[i]比所有序列的末尾都大,或等于最大末尾,说明有更长的递增序列产生我们把最长的序列复制一遍并加上这个nums[i]。 1. 如果nums[i]比所有序列的末尾都大说明有更长的递增序列产生我们把最长的序列复制一遍并加上这个nums[i]。
2. 否则,我们从前往后找,找到第一个末尾大于等于自己的那个序列,更新这个末尾。 2. 否则,我们从前往后找,找到第一个末尾大于等于自己的那个序列,更新这个末尾。
比如这时如果再来一个9那就是第1种情况更新序列为 比如这时如果再来一个9那就是第1种情况更新序列为
@ -60,7 +60,7 @@ for all j in [0, i-1]:
* lower_bound(first, last, val): 返回有序数组或容器的[first, last)范围内**第一个大于或等于**val的元素的位置(指针或者迭代器,下同); * lower_bound(first, last, val): 返回有序数组或容器的[first, last)范围内**第一个大于或等于**val的元素的位置(指针或者迭代器,下同);
* upper_bound(first, last, val): 返回有序数组或容器的[first, last)范围内**第一个大于**val的元素的位置; * upper_bound(first, last, val): 返回有序数组或容器的[first, last)范围内**第一个大于**val的元素的位置;
可见这里我们应该使用`lower_bound`。 可见这里我们应该使用`lower_bound`找到第一个大于等于target的位置
# C++ # C++