zoukankan      html  css  js  c++  java
  • leetcode 300最长上升子序列

    用递归DFS遍历所有组合肯定积分会超时,原因是有很多重复的操作,可以想象每次回溯后肯定会有重复操作。所以改用动态规划。建立一个vector<int>memo,初始化为1,memo[i]表示以第i个数字结尾的最长上升子序列的。每次a把当前数字当作是最后一个序列的最后一个数字,只看这个数字之前的数字,如果比他之前的数字大,那么选择这个数字之后最大上升序列长度+1,memo[i]=memo[j]+1.

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
        int lengthOfLIS(vector<int>& nums) {
            if(nums.size()!=0)
            {
                vector<int>memo(nums.size() + 1, 1);
            int i;
            int j;
            for (i = 1; i <= nums.size() - 1; i++)
            {
                for (j = 0; j < i; j++)
                {
                    if (nums[i] > nums[j])
                    {
                        if (memo[i] < memo[j] + 1)
                        {
                            memo[i] = memo[j] + 1;
                        }
                    }
                }
            }
            sort(memo.begin(), memo.end());
            return memo[memo.size() - 1];
            }
            else
                return 0;
        }
    };

    ---恢复内容结束---

  • 相关阅读:
    c语言之数据类型
    C语言之概述
    012.day12
    011.day011
    010.day010
    010.day08
    010.周六自习
    009.day07
    008.day06
    007.day05
  • 原文地址:https://www.cnblogs.com/legendcong/p/9150926.html
Copyright © 2011-2022 走看看