leetcode算法题--最长上升子序列

原题链接:https://leetcode-cn.com/problems/longest-increasing-subsequence/

思路是从后向前用动态规划,转移方程为

 dp[i]=max(dp[i],(nums[i]<nums[j])?dp[j]+1:1)

代码:

int lengthOfLIS(vector<int>& nums) {
     if(nums.empty()) return 0;
     int len=nums.size();
     int max=INT_MIN;
     vector<int> dp(len,0);
     for(int i=len-1;i>=0;i--){
         for(int j=i;j<len;j++){
             dp[i]=std::max(dp[i],(nums[i]<nums[j])?dp[j]+1:1);
         }
         max=std::max(max,dp[i]);
     }
     return max;
 }

从前往后用动态规划也可以

dp[i]=max(dp[j])+1,其中0≤j<i且num[j]<num[i]

你可能感兴趣的:(算法)