动态规划:最长上升子序列(java)

最长上升子序列:要求球数组当中严格递增的子序列,可以不连续。

在这里插入图片描述

思路:设一个数组,保存以当前元素结尾的最长递增子串。
例如,1结尾的最长递增子串是1个元素,3结尾的最长递增子串是2各元素,2结尾的最长递增子串是2各元素,计算5结尾的时候,先求max之前所有元素的最长递增子串,然后1<5,所以生成2,。3<5,所以生成3。2<5,所以生成3,所以5的位置上是3.
再看1,

在这里插入图片描述

import java.util.Arrays;

public class maxAscendSequence {
	
	public static Integer[] getMaxAscendSequence(Integer arr[]) {
		Integer[] temp = new Integer[arr.length];
		temp[0] = 1;
		Integer max;
		for (int i = 1; i < arr.length; i++) {
			max = 0;
			temp[i] = 0;
 			for (int j = 0; j < i; j++) {
				if (arr[j] < arr[i]) {
					if (max < temp[j] + 1) {
						max = temp[j] + 1;
					}
				}
			}
			temp[i] = max;
		}
//		Arrays.sort(temp);
		return temp;
		
	}
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer[] arr = new Integer[9];
		arr[0] = -2;
		arr[1] = 1;
		arr[2] = -3;
		arr[3] = 4;
		arr[4] = -1;
		arr[5] = 2;
		arr[6] = 1;
		arr[7] = -5;
		arr[8] = 4;
		for (int i = 0; i < arr.length; i++) {
			System.out.println(getMaxAscendSequence(arr)[i]);
		}
		System.out.println();

	}

}

发布了31 篇原创文章 · 获赞 3 · 访问量 878

猜你喜欢

转载自blog.csdn.net/qq_38888209/article/details/104500769