宁波网站推广平台咨询,中煜建设有限公司网站,seo在线优化工具,网站建设的整体流程动态规划#xff1a;
状态定义#xff1a;dp[i]表示以索引为第i个字符结尾的最长递增子序列的长度#xff0c;d[n-1]表示以第n-1个字符作为结尾的最长递增子序列的长度#xff0c;但是这并不是答案#xff0c;因为整个序列中的最长递增子序列不一定以n-1结尾#xff0c;…动态规划
状态定义dp[i]表示以索引为第i个字符结尾的最长递增子序列的长度d[n-1]表示以第n-1个字符作为结尾的最长递增子序列的长度但是这并不是答案因为整个序列中的最长递增子序列不一定以n-1结尾所以应该取出dp数组中的最大值。状态转移想要求dp[i]的值遍历0-i之间的dp[j]如果nums[i]nums[j]则表示第i个字符可以嵌在第j个字符后面dp[i]dp[j]1不断遍历jdp[i]取遍历过程中的最大值即可即dp[i] Math.max(dp[i], dp[j] 1)状态初始化nums的长度最小为1表示最少有一个数字dp[0]表示以第一个字符为结尾的最长递增子序列的长度dp[0]1而其他所有位置的数字都至少存在一个只包含自身的最长递增子序列因此dp数组中所有初始值都应该设置成dp[i]1。
class Solution {public int lengthOfLIS(int[] nums) {int maxLen 1;int n nums.length;int[] dp new int[n];Arrays.fill(dp, 1);for (int i 1; i n; i) {for (int j 0; j i; j) {if (nums[i] nums[j]) dp[i] Math.max(dp[i], dp[j] 1);}maxLen Math.max(maxLen, dp[i]);}// return dp[n];return maxLen;}
}