Java最长的子序列

时间:2014-11-29 10:24:21

标签: java

我有一个数组,我想计算由等号做出的最长子序列的长度: 示例:5 1 1 9 9 9 4 4 6 6 4 4 4 - >最长子序列的长度为3(9 9 9)。 这是我到目前为止所得到的,但它不起作用。

int lung=0, lungmax=0;
        int indice = 0;
        int [] values = new int [30];  
        for(int k=0; k<30; k++)
        {
            if (values[k]==values[k+1])
            {
                lung++;
                if (lung>lungmax)
                {
                    lungmax=lung;
                    indice=values[k];
                }
            }   
            else lung=0;
        }

        lungmax = lungmax++;
    System.out.println("the length of the longest subsequence is: "+lungmax);

3 个答案:

答案 0 :(得分:5)

您的代码有两个错误:

for(int k=0; k<30; k++) {
    if (values[k]==values[k+1]) {

此循环将执行,直到k达到值30。因此,k的上次使用值为29。如果您在if语句中使用该值,则可以通过调用values[k+1](== values[30])来超过该数组范围。

将该循环更改为:

for(int k = 0; k < values.length - 1; k++) {

第二个问题是这一行:

lungmax = lungmax++;

这与:

相同
int temp = lungmax;
lungmax = lungmax + 1;
lungmax = temp;

正如您所看到的,您已经无视&#34;增量。将该行更改为:

lungmax++;

答案 1 :(得分:4)

试试这个。通过应用我的方法,ArrayIndexOutOfBoundsException已被删除。

public static void main(String args[]) {
    int lung = 1, lungmax = 0;
    int indice = 0;
    int[] values = {1, 2, 2, 3, 3, 3, 5, 5, 5, 5, 6};
    for (int k = 1; k < values.length; k++) {

        if (values[k - 1] == values[k]) {
            lung++;
            if (lung > lungmax) {
                lungmax = lung;
                indice = values[k];
            }
        } else {
            lung = 1;
        }
    }
    System.out.println("the length of the longest subsequence is: " + indice + "/" + lungmax);
}

答案 2 :(得分:1)

或者简单地说 进行以下更改

int lungmax=1;

并替换

lungmax=lung

lungmax++;

并删除上一个lungmax=lungmax++

加上汤姆建议:k<30-1