• [leetcode] 300. Longest Increasing Subsequence (Medium)


    题意:

    求最长增长的子序列的长度。

    思路:

    利用DP存取以i作为最大点的子序列长度。

    Runtime: 20 ms, faster than 35.21% of C++ online submissions for Longest Increasing Subsequence.

    class Solution
    {
    public:
      int lengthOfLIS(vector<int> &nums)
      {
        if (nums.size() == 0)
          return 0;
        vector<int> dp(nums.size(), 0);
        dp[0] = 1;
        int resNum = 1;
        for (int i = 1; i < nums.size(); i++)
        {
          int curmaxNum = 0;
    
          for (int j = 0; j < i; j++)
          {
            if (nums[i] > nums[j])
              curmaxNum = max(dp[j], curmaxNum);
          }
          dp[i] = curmaxNum + 1;
          resNum = max(dp[i], resNum);
        }
        return resNum;
      }
    };

    解法二:

    讨论区里的最优解:

    利用一个容器去动态存储一个增长子序列,遍历Nums,对每一个nums[i],在容器中寻找是否有大于等于nums[i]的元素,若存在,则将改值替换为nums[i];

    若不存在,则将nums[i]加入该容器,于是容器中的元素永远是 小于 关系的。

    0ms.

    class Solution {
    public:
        int lengthOfLIS(vector<int>& nums) {
            vector<int> res;
            for(int i=0; i<nums.size(); i++) {
                auto it = std::lower_bound(res.begin(), res.end(), nums[i]);
                if(it==res.end()) res.push_back(nums[i]);
                else *it = nums[i];
            }
            return res.size();
        }
    };
  • 相关阅读:
    memcached与redis 对比
    Java中的成员初始化顺序和内存分配过程
    mysql inner join,full outer join,left join,right jion
    事务 相关概念理解
    最简单的重试机制
    垃圾脚本黑我linux服务器
    趣解curl
    面试题
    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
    PermGen space
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/10037596.html
Copyright © 2020-2023  润新知