最长递增子序列的长度
给你一个整数数组 nums ,找到其中最长严格递增子序列的【长度】。
- dp[i] 的值代表 nums 前 ii 个数字的最长子序列长度。 将j < i
- dp[i] = max(dp[i], dp[j] + 1) for j in [0, i)
import java.util.Arrays; /** * 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 * * 输入:nums = [10,9,2,5,3,7,101,18] * 输出:4 * 解释:最长递增子序列是 [2,3,7,101],因此长度为4。 * * */ public class lengthOfLIS { public static int lengthOfLISolution(int[] nums) { if(nums.length == 0) return 0; int[] dp = new int[nums.length]; int res = 0; // 保存结果 Arrays.fill(dp, 1);//填充初始值 dp = 【1,1,1,...】,每个数自成一个长度为1的子序列 for(int i = 0; i < nums.length; i++) { for (int j = 0; j < i; j++){ if (nums[j] < nums[i]) dp[i] = Math.max(dp[i], dp[j]+1); } res = Math.max(dp[i],res); } return res; } }