package 动态规划; import java.util.Arrays; /** * @ClassName 查找最长子序列 * @Author ACER * @Description 对于 1 2 3 6 5 最长子序列是 1 2 3 5 * @Date 2021/7/11 15:57 * 动态规划,将问题分解为子问题 :以ak为终点的最长子序列。 * @Version 1.0 **/ public class 查找最长子序列 { public static void main(String[] args) { int array[]={1 ,2, 3 ,4 ,6 ,8 ,10}; int maxlen[]=new int[10]; //将maxlen初始化为1,当ak左边数字都比ak大 则最长升序子序列就为1本身。 for (int i = 0; i < maxlen.length; i++) { maxlen[i]=1; } for (int i = 1; i <array.length ; i++) { //查看i左边的最大上升子序列长度 for (int j = 0; j < i; j++) { if (array[i]>array[j]){ maxlen[i]=Math.max(maxlen[j]+1,maxlen[i]); } } } System.out.println(Arrays.stream(maxlen).max().getAsInt()); Arrays.stream(maxlen).forEach(a-> System.out.print(a+" ")); } }