我的程序试图找到数组中最长的连续序列,但输出错误。
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]
我做错了什么?谢谢。
答案 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值。