一.最长上升序列基本思路:
先排序,然后用动态规划思路解决问题,转移方程:dp[i]=max(dp[i],dp[j]+1) ,if condition
二.例题
例题1--300. 最长上升子序列,给定一个无序的整数数组,找到其中最长上升子序列的长度。
基本思路:对于子序列最值问题,子序列尾部元素是否被选中是一个很重要的隐含状态,它可以帮忙递推下一个的状态,动态规划,dp[i]表示以i为终点的最长上升长度。
- 对于一个严格递增的子序列,当前元素是否能续上,主要是比较当前元素和改子序列的尾部元素的大小关系
- 所以可以设计一个dp[i],表示以i结尾的最长上升序列,dp[i]=max(dp[j]+1,dp[i]) if dp[i]>dp[j]
int lengthOfLIS(vector<int>& nums) {
if(nums.size()==0)
return 0;
int maxLen=1;
vector<int> dp(nums.size(),1);
for(int i=1;i<dp.size();i++){
for(int j=0;j<i;j++){
if(nums[j]<nums[