求一个数组中的最长递增子序列 public class test { public static void main(String[] args) { int[] arr={1,5,2,4,3}; System.out.println(lis(arr)); } public static int lis(int[] arr){ //定义一个数组,用于存储各个位置后的最大长度,初始化为1 int len=arr.length; int[] longest=new int[len]; for (int i = 0; i < len; i++) { longest[i]=1; } //填写数组中每个位置的值 因为我们要从下到上依此计算L[4],L[3]直到L[0] 所以需要两层for循环 //第一层for循环从下到上依此遍历L[4]到L[0],第二层for遍历L[i]中的Max // 0 1 2 3 4 len=5 5-2=3 for (int i = len-2; i >=0; i--) {//第一次L[3] 5-2=3 for (int j = i+1; j <len; j++) { if(arr[j]>arr[i]){ longest[i]=Math.max(longest[i],longest[j]+1); } } } int max = 0; for (int j=0; j<len; j++) { if (longest[j] > max) max = longest[j]; //从longest[j]中找出最大值 } return max; } }
动态规划第一题
于 2022-10-20 16:27:45 首次发布