打卡第二十六天
1道简单题+2道中等题

题目:

思路: 贪心+二分查找,维护一个"潜在的最优递增序列集合",让每个长度的递增子序列的末尾元素尽可能小,从而为后续元素提供更多的增长可能性。

代码:
class Solution {
public:int lengthOfLIS(vector<int>& nums) {vector<int> g;// g数组用于维护当前可能的递增子序列for (int x : nums) {// 遍历输入数组中的每个元素auto it = ranges::lower_bound(g, x);// 在 g 数组中二分查找第一个 >= x 的元素位置if (it == g.end()) {// 如果找不到 >=x 的元素,说明 x 比 g 中所有元素都大g.push_back(x); // 将 x 追加到当前最长递增子序列的末尾} else {*it = x;// 如果找到了 >=x 的元素,用 x 替换它}}return g.size();// g数组的长度就是最长递增子序列的长度}
};
耗时≈一小时 明天继续