我已经为这个问题写了一个方法: input:整数数组 return:最长连续整数序列的长度。 喜欢:for {9,1,2,3},返回3,cuz {1,2,3}
该方法运行良好。希望有人可以帮我调试。
public int solution(int[] arr){
int counter = 1;
int max = arr[1];
//find the max in the array
for (int i : arr){
if (i > max){
max = i;
}
}
int[] nArr = new int[max];
for (int i : arr){
nArr[i] = i;
}
List<Integer> counters = new ArrayList<>();
for (int i = 0; i < max; i++){
if (nArr[i] == nArr[i+1] - 1){
counter++;
}else{
counters.add(counter);
counter = 1;
}
}
max = counters.get(1);
for (int i : counters){
if (i > max){
max = i;
}
}
return max; }
非常感谢!!!
答案 0 :(得分:0)
你不需要使用ArrayList ...如果你想要的只是连续整数的最大数,那么试试这个:
int[] a = somethingBlaBla;
int counter = 0; // Stores temporary maxes
int secCounter = 0; //Stores final max
for(int j = 0; j<a.length-1; j++){ // Iterate through array
if(a[j] == a[j+1]-1){
counter++; // If match found then increment counter
if(counter > secCounter)
secCounter = counter; // If current match is greater than stored match, replace current match
}
else
counter = 0; // Reset match to accumulate new match
}
System.out.println(secCounter);
至于你的方法,我注意到的第一件事是max
在数组中具有最大数字的值,而不是数组的大小。因此,如果我的数组类似于{1,2,3,45,6,7,8,9}
,它将抛出indexOutOfBoundsException
,因为它将尝试在数组中获取第45个元素,而不存在。