中国平安的编程

动态规划:最长递增子序列的变形,

考试时没写完,考试后10分钟内才发现left<arr[j]写成=的错误,没招了,

n>=3

输入1,2,3,4,5,6,7,8严格递增

返回最长斐波那契子序列长度为5

没有返回0

import java.util.*;

class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.nextLine();
        String[] aa = a.split(",");
        int len = aa.length;
        int[] arr = new int[len];
        HashMap<Integer,Integer> ma = new HashMap<>();
        for(int i =0;i<len;i++){
            arr[i] = Integer.parseInt(aa[i]);
            ma.put(arr[i],i);
        }
        int[] dp = new int[len];
        dp[0] = 1;
        dp[1]=2;
        if(arr[2]==arr[1]+arr[0]){
            dp[2] = 3;
        }
        int max = 2;
        for(int i = 3;i<=len-1;i++){
            int cur = arr[i];
            System.out.println(i+":");
            for(int j=i-1;j>=2;j--){//中间的那一位
                int left = cur - arr[j];
                if(left<arr[j]&&ma.containsKey(left)){
                    //进行更新值
                    int idx = ma.get(left);
                    dp[i] = Math.max(dp[i],2+dp[idx]);
                    System.out.println(arr[j]+" "+left+" "+dp[i]);
                }
            }
//            System.out.println(i+"-"+arr[i]+":"+dp[i]);
            max = Math.max(max,dp[i]);
        }
        if(max<=2){
            System.out.println("0");
        }else{
            System.out.println(max);
        }
    }
}

#java后端[话题]##中国平安#
全部评论

相关推荐

昨天 23:50
已编辑
南京大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务