LeetCode-Solutions-in-Cpp17

Solutions to high-frequency interview questions of LeetCode in C++17, taking into account both efficiency and comprehensibility.


Project maintained by downdemo Hosted on GitHub Pages — Theme by mattgraham
[5, 4], [6, 4], [6, 7], [2, 3] => [2, 3], [5, 4], [6, 7], [6, 4]
求 3474 的最大升序子序列长度,即 347,长度为 3
class Solution {
 public:
  int maxEnvelopes(vector<vector<int>>& envelopes) {
    if (envelopes.empty()) {
      return 0;
    }
    sort(envelopes.begin(), envelopes.end(),
         [](auto& x, auto& y) { return tie(x[0], y[1]) < tie(y[0], x[1]); });
    vector<int> dp(envelopes.size(), 1);
    int res = 1;
    for (int i = 0; i < dp.size(); ++i) {
      for (int j = 0; j < i; ++j) {
        if (envelopes[i][1] > envelopes[j][1]) {
          dp[i] = max(dp[i], dp[j] + 1);
        }
      }
      res = max(res, dp[i]);
    }
    return res;
  }
};
class Solution {
 public:
  int maxEnvelopes(vector<vector<int>>& envelopes) {
    if (envelopes.empty()) {
      return 0;
    }
    sort(envelopes.begin(), envelopes.end(),
         [](auto& x, auto& y) { return tie(x[0], y[1]) < tie(y[0], x[1]); });
    vector<int> v{envelopes[0][1]};
    for (int i = 1; i < envelopes.size(); ++i) {
      if (envelopes[i][1] > v.back()) {
        v.emplace_back(envelopes[i][1]);
      } else {
        *lower_bound(v.begin(), v.end(), envelopes[i][1]) = envelopes[i][1];
      }
    }
    return v.size();
  }
};