微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

最长递增子序列递归方法

如何解决最长递增子序列递归方法

以下是使用递归(不是 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 举报,一经查实,本站将立刻删除。