最长递增子序列递归方法

问题描述

以下是使用递归(不是 dp)的最长递增子序列问题的两种解决方案。 第一个解决方案给了我正确的答案,但第二个解决方案不起作用。 我对这种方法有两个问题:

  1. 方法内部初始化 result1 有什么意义。
  2. 为什么在方法外初始化不起作用?

一个解决方

注意:这种方法效果很好

public class LongestIncreasingSubsequence {

    public static void main(String[] args) {
        LongestIncreasingSubsequence obj1=new LongestIncreasingSubsequence();
        int[] arr= {7,6,3,1,5,8,4,9};
        System.out.println(obj1.countLIS(arr,-1));
    }

    public int countLIS(int[] arr,int curr,int prev) {
        if(curr==arr.length)
            return 0;
        int result1=0;
        if(prev==-1 || arr[curr]>arr[prev]) 
            result1=1 + countLIS(arr,curr+1,curr);
        int result2=countLIS(arr,prev);
        return Math.max(result1,result2);
    }

}

第二种解决方

注意:下面的代码中只改变了 result1 的范围,结果是错误的答案。

public class LongestIncreasingSubsequence {

    public static void main(String[] args) {
        LongestIncreasingSubsequence obj1=new LongestIncreasingSubsequence();
        int[] arr= {7,-1));
    }

    int result1=0;
    public int countLIS(int[] arr,int prev) {
        if(curr==arr.length)
            return 0;
        if(prev==-1 || arr[curr]>arr[prev]) 
            result1=1 + countLIS(arr,result2);
    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)