给定一个无序的整数数组,找到其中最长上升子序列的长度。

    1. 输入: [10,9,2,5,3,7,101,18]
    2. 输出: 4
    3. 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4
    • 动态规划

    时间复杂度为o(n^2)
    再次注意 状态数组和前面的DP[I]比较到最大最小值的写法

    1. class Solution {
    2. public:
    3. int lengthOfLIS(vector<int>& nums) {
    4. int len = nums.size();
    5. if (len < 2) return len;
    6. vector<int> dp(len, 1);
    7. int res = 0;
    8. for (int i = 1; i < len; i++) {
    9. for (int j = 0; j < i; j++) {
    10. if (nums[i] > nums[j]) {
    11. dp[i] = max(dp[i], dp[j] + 1);
    12. }
    13. }
    14. if (dp[i] >= res) res = dp[i];
    15. }
    16. return res;
    17. }
    18. };