数组中最长的,随后的,升序子序列

时间:2015-05-19 20:39:03

标签: recursion dynamic subsequence

我很难为大学做作业。任务是找到一种递归的,然后是动态的编程方式来计算数组中最长的,随后的,递增的子序列的长度。例如,如果数组为:{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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

试试这个:

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是子序列的最新元素