gpt4 book ai didi

java - 删除数组中无用的元素

转载 作者:行者123 更新时间:2023-12-01 09:19:20 25 4
gpt4 key购买 nike

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

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, 0, 22, 23, 24, 25, 26, 27]

右输出

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

我做错了什么?谢谢。

最佳答案

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

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 值来偏移迭代。

关于java - 删除数组中无用的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40272878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com