• LeetCode-300-最长上升子序列


    LeetCode-300-最长上升子序列

    题目

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

    示例:
    
    输入: [10,9,2,5,3,7,101,18]
    输出: 4 
    解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
    
    

    思路

    设定动态方程dp[i]表示从开始到第i个数字的最长上升子序列的长度;

    那么可以确定的是,它一定为比它小的数字中,最大的长度加一,即:

    [dp[i]=max(dp[j])+1; { m{j}} in [1,i - 1] ..nums[j]<nums[i]; ]

    最后最大的子序列就是:

    [ans=max(dp[i]) ]

    这样一来,算法的复杂度就变成了O(n^2)了,完成后看一下题解,确实这是最菜的方法,后续还有贪心+二分;

    不过我不贪心,AC就好,哈哈:)

    代码

    class Solution {
    public:
        vector<int> ans;
        int lengthOfLIS(vector<int>& nums) {
    		ans.push_back(0);
    		int len = nums.size(), num = 0, idx = 0, res = 0;
    		for (int i=0; i<len; i++)
    		{
    			idx = 1;
    			num = nums[i];
    			for (int j=0; j<i; j++)
    			{
    				if (nums[j] < num)
    					idx = max(ans[j+1]+1, idx);
    			}
    			res = max(res, idx);
    			ans.push_back(idx);
    		}
    		return res;
        }
    };
    
  • 相关阅读:
    SqlLikeAttribute 特性增加 左、右Like实现
    MySql高效分页SQL
    ConcurrentQueue对列的基本使用方式
    第一次
    kubeadm搭建高可用k8s平台(多master)
    prometheus监控
    pyecharts地图中显示地名
    anaconda安装及使用
    Python的pyecharts安装
    安装MY SQL详细步骤
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13021619.html
Copyright © 2020-2023  润新知