【问题标题】:Longest, consequent, ascending subsequence of an array数组的最长、后继、升序子序列
【发布时间】:2015-05-19 20:39:02
【问题描述】:

我被困在做大学作业。任务是找到一种递归然后动态编程的方法来计算数组的最长、后继、升序子序列的长度。例如,如果数组是: {4 , -5 , -3, -2, 5, -2, 0, 3 , 2} 最大长度将是 4 子序列 {-5, -3, -2, 5 }。我很难找到递归方式,如果没有递归方式,就不可能为我找到动态方式。
我尝试过编程,但我知道这是错误的,我不知道如何解决它:

public static int length(int[] arr,int j)
{
    if(arr.length == 1)
    {
        return 1;
    }
    if(j == 1)
    {
        if(arr[j-1] < arr[j])
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    else
    {
        int c = length(arr,j-1);
        if(arr[j-1] < arr[j])
        {
            return 1 + c;
        }
        else
        {
            return 0;
        }
    }
}

【问题讨论】:

    标签: recursion dynamic subsequence


    【解决方案1】:

    试试这个:

    int length(int index, int previous)
        {
           if(arr.length == (index+1))
                return 0;
           else 
               if(arr[index] > previous)
                   return 1+length(index+1,arr[index]);
               else return length(index+1,previous)
        }
    

    也许你不需要在每个递归调用中通过创建一个静态变量来将数组作为参数,

    Previous是子序列的最新元素

    【讨论】:

      猜你喜欢
      • 2018-02-19
      • 1970-01-01
      • 2014-01-07
      • 2018-05-19
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多