zoukankan      html  css  js  c++  java
  • leetcode300. Longest Increasing Subsequence 最长递增子序列 、674. Longest Continuous Increasing Subsequence

     Longest Increasing Subsequence 最长递增子序列

     子序列不是数组中连续的数。

    dp表达的意思是以i结尾的最长子序列,而不是前i个数字的最长子序列。

    初始化是dp所有的都为1,最终的结果是求dp所有的数值的最大值。

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

    674. Longest Continuous Increasing Subsequence

    相对于最长递增子序列来说,这个题目更加简单,只需要比较前一个数字就好,不用把前面的数字都比较完。因为如果比前一个小,直接就无法完成递增,只能保持当前的值1;如果比前一个数字大,其实前一个数字就已经计算了之前递增的个数,直接加1就好了

    class Solution {
    public:
        int findLengthOfLCIS(vector<int>& nums) {
            if(nums.empty())
                return 0;
            int length = nums.size();
            vector<int> dp(length,1);
            for(int i = 1;i < length;i++){
                if(nums[i] > nums[i-1])
                    dp[i] = dp[i-1] + 1;
            }
            int max_num = 1;
            for(int i = 0;i < length;i++)
                max_num = max(max_num,dp[i]);
            return max_num;
        }
    };
  • 相关阅读:
    使用git笔记
    linux 进程管理的一些命令使用
    [zz]XML DOM 教程
    [zz]std::string 和 c 的字符串
    [zz]grep 命令的使用
    [zz]XercesC++ 参考
    [zz]Windows WordPress本地安装教程
    今天调出来的关于cello的bug
    shell 编程的一些问题
    关于java中边界值校验的问题
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9567417.html
Copyright © 2011-2022 走看看