1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 动态规划(最长递增子序列)---最长递增子序列

动态规划(最长递增子序列)---最长递增子序列

时间:2022-09-28 12:39:01

相关推荐

动态规划(最长递增子序列)---最长递增子序列

最长递增子序列

300. Longest Increasing Subsequence (Medium)

题目描述:

给定一个数组,找到它的最长递增子序列

思路分析:

动态规划思想,定义一个数组 dp 存储最长递增子序列的长度,dp[n] 表示以 Sn 结尾的序列的最长递增子序列长度。对于一个递增子序列 {Si1, Si2,...,Sim},如果 im < n 并且 Sim < Sn,此时 {Si1, Si2,..., Sim, Sn} 为一个递增子序列,递增子序列的长度增加 1。满足上述条件的递增子序列中,长度最长的那个递增子序列就是要找的,在长度最长的递增子序列上加上 Sn 就构成了以 Sn 为结尾的最长递增子序列。因此 dp[n] = max{ dp[i]+1 | Si < Sn && i < n} 。

代码:

public int lengthOfLIS(int []nums){if(nums==null||nums.length==0)return 0;int []dp=new int [nums.length];for(int i=0;i<nums.length;i++){int max=1;for(int j=0;j<i;j++){if(nums[i]>nums[j]){max=Math.max(max,dp[j]+1);}}dp[i]=max;}int res=dp[0];for(int i=1;i<nums.length;i++){if(dp[i]>res)res=dp[i];}return res;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。