最长上升子序列的长度

本文介绍了两种求解最长上升子序列长度的方法:一种是通过已知情况推导新情况;另一种是更新以当前元素为终点的最长上升子序列长度。
摘要由CSDN通过智能技术生成

1)第一种思路是每次确认当点元素为终节点的时候,由已经其他情况推出自己的情况

/**
 * 最大上升子序列的长度
 * 给定一个无序的序列,求其最大上升子序列的最大长度
 * 子序列要为上升并且长度最长
 * 思路:
 * 序列一共k个点,{a1, a2, ..., ak} 以每个点为终点,这样就有k个状态,分别讨论它们的最长上升子序列,然后取最大的情况
 * 维护一个一维数组maxLen[k],表示以序列元素{ak}为终点时的最长上升子序列
 * 递推公式:
 * maxLen[1] = {ak}
 * maxLen[k] = Max{maxLen[i]} + 1(i为k左边的元素,并且ai小于ak,在这些元素中挑选出以该元素为终点,上升子序列最长的情况,加上{ak}自己,就是以{ak}为
 * 终点的最长上升子序列)
 */
package dp;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
	static int[] a = null;
	static int[] maxLen = null;
	public static void main(String[] args){
		/**
		 * 输入
		 * 第一行:n 表示序列的长度
		 * 第二行:长度为n的序列,元素之间空格隔开
		 * 输出:
		 * 最长上升子序列的长度
		 * 测试结果:
		 * 输入:
		 *  7
			1 7 3 5 9 4 8
			输出:
			4
		 */
		//代码实现
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值