题解 | #Redraiment的走法#求最长上升子序列,详加代码注释

Redraiment的走法

http://www.nowcoder.com/practice/24e6243b9f0446b081b1d6d32f2aa3aa

import java.util.Scanner;

//求最长上升子序列,合唱队的一部分
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = Integer.parseInt(in.nextLine());
            String[] high = in.nextLine().split("\\s");
            int[] highInt = new int[n];
            int[] maxL = new int[n];//以每个位置作为结束位置最长连续子序列
            int max = 0;//最长连续上升子序列的长度
            for(int i=0;i<n;i++){
                highInt[i] = Integer.parseInt(high[i]);
            }
            for(int i=0;i<n;i++){//双层循环
                for(int j=0;j<i;j++){//内循环
                    if(highInt[i]>highInt[j]){
                        maxL[i] = Math.max(maxL[i],maxL[j]); 
                    }
                }
                maxL[i] = maxL[i] + 1;//加上自身
                max = Math.max(max,maxL[i]);//求最大值
            } 
            System.out.println(max);
        }
    }
}
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务