删除数组中无用的元素

时间:2016-10-26 22:06:52

标签: java

我的程序试图找到数组中最长的连续序列,但输出错误。

public class longsec {
    public int[] longestForward(int[] arr){
        int subSeqLength = 1;
        int longest = 1;
        int indexStart = 0;
        int indexEnd = 0;

        for (int i = 0; i < arr.length - 1; i++)
        {
            if (arr[i] == arr[i + 1] - 1)
            {
                subSeqLength++;
                if (subSeqLength > longest)
                {
                    longest = subSeqLength;
                    indexStart = i + 2 - subSeqLength;
                    indexEnd = i + 2;
                }

            } 
            else
                subSeqLength = 1;
        }


       int T[] = new int[arr.length];
        for (int i = indexStart; i < indexEnd; i++)


             T[i]= arr[i];


        return T;

    }}  

输入

{23,10,22,5,33,8,9,21,50,41,60,80,99,22,23,24,25,26,27}

输出

[0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,25,26,27]

正确输出

[22,23,24,25,26,27]

我做错了什么?谢谢。

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为您正在创建一个与您输入的数组大小相同的数组。正如你在这里看到的那样。

int T[] = new int[arr.length];

但是如果只是改变那段代码,你将得到一个arrayIndexOutOfBoundsException。它将被扔到这里:

for (int i = indexStart; i < indexEnd; i++)

         T[i]= arr[i];

因为indexStart通常会大于数组的长度。 因此,不是从indexStart循环到indexEnd,而是应该循环遍历连续数字的长度,如下所示。

int T[] = new int[longest];

for(int i = 0; i < longest; i++)
    T[i] = arr[i + indexStart];

这应该会给你你想要的输出。我正在做的只是将迭代偏移到数组的indexStart值。