zoukankan      html  css  js  c++  java
  • [刷题] 300 Longest Increasing Subsequence

    要求

    • 给定一个整数序列,求其中的最长上升子序列长度
      • 子序列元素可不相邻
      • 元素相等不算上升
      • 一个序列可能有多个最长上升子序列,但最长的长度只有一个

    思路

    • 暴力解法:选择所有子序列进行判断((2^n)*n)
    • 动态规划(n^2)
      • LIS(i):[0...i]范围内,选择数字nums[i]可以获得的最长上升子序列长度
      • LIS(i) = max( 1 + LIS(j) if nums[i] > nums[j] ) (j<i)

    实现

     1 class Solution {
     2 public:
     3     int lengthOfLIS(vector<int>& nums) {
     4     
     5         if( nums.size() == 0 )
     6             return 0;
     7         
     8         // memo[i] 表示以 nums[i] 为结尾的最长上升子序列的长度 
     9         vector<int> memo(nums.size(),1);
    10         for( int i = 1 ; i < nums.size() ; i ++ )
    11             for( int j = 0 ; j < i ; j ++ )
    12                 if( nums[j] < nums[i] )
    13                     memo[i] = max( memo[i] , 1 + memo[j] );
    14         
    15         int res = 1;
    16         for( int i = 0 ; i < nums.size() ; i ++ )
    17             res = max( res, memo[i] );
    18         
    19         return res;            
    20     }
    21 };
    View Code

    相关

    • 376 Wiggle Subsequence
  • 相关阅读:
    POJ 2411 Mondriaan's Dream -- 状压DP
    codeforces 792A-D
    codeforces 796A-D
    Acdream1201 SuSu's Power
    HDU 2818 Building Block
    C# NetStream
    基于Duff's Device的C简易无栈协程实现
    CentOS 多版本 GCC 共存
    2017杭电多校第一场
    2019杭电多校第十场
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12765197.html
Copyright © 2011-2022 走看看