当前位置: 首页 > 知识库问答 >
问题:

[java]最长连续整数序列,调试

公冶子安
2023-03-14

我为这个问题写了一个方法:输入:整数数组返回:最长连续整数序列的长度。like:对于{9,1,2,3},返回3,因为{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;    }

非常感谢!!!

共有1个答案

隆璞
2023-03-14

你不需要使用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个元素。

 类似资料:
  • 我想显示给定数组int中的所有连续序列。最后,我想用文本显示最长的序列。 我对数组进行了排序,找到了所有序列 以下仅是一小段代码,因为我知道其余部分不起作用: 我尝试了许多不同的方法,但无法弄清楚。

  • 例如: 给定为序列,和是要考虑的有效子序列,但不是,因为它包含连续的元素3和2。 如何找到一个最长的子序列,使它在中单调递减 我知道问题的版本包含单调的增加/减少。 但这里的附加条件让它变得困难。 有没有更好的办法?

  • A是一个数组,B是A中所有元素的质因数阶,< code>size(A)=N (1 到目前为止,我还没有想过这个问题,所以没有什么成就,但是我保证我已经想了很久了,希望有帮助,谢谢!

  • {4,5,1,5,7,6,8,4,1},答案是5。 对于第一个例子,子数组{5,3,1,4,2}排序后可以形成连续序列1,2,3,4,5,它们是最长的。 对于第二个示例,子数组{5,7,6,8,4}是结果子数组。

  • 问题内容: 对于这个例子说,我有两个字段的表,和。 该表具有以下数据 我想回来 我想返回的结果是每个区域递增连续值的最长长度。对于。 我将如何在MS Sql 2005上执行此操作? 问题答案: 一种方法是使用遍历每一行的递归CTE。如果该行符合条件(增加同一区域的订单号),则将链长增加一。如果没有,则启动一个新链: SQL Fiddle的实时示例。 另一种方法是使用查询查找“中断”,即以相同区域的

  • 本文向大家介绍手写算法:最长公共连续子序列相关面试题,主要包含被问及手写算法:最长公共连续子序列时的应答技巧和注意事项,需要的朋友参考一下 参考回答: