编写一个程序来查找整数数组中最长的连续序列的长度?

时间:2017-04-03 17:06:04

标签: java arrays collections

例如, 鉴于[100,4,2,1,3,2], 最长的连续元素序列是[1,2,3,4]。

 public class Array {
  public static void main(String args[]){

    int a[]={10,15,1,2,3,4,5,11,12};

    int b=1;
    int c=0;
    for(int i=0;i<a.length-1;i++){

       if(a[i]-a[i+1]==-1){

         b=b+1;
         c=c+1;
         if(b>=c)
       {

       System.out.println(a[i]);

         }
         else{
             b=0;
         } 

    }

}
}
}

但我的输出为1 2 3 4 11 而输出应为1 2 3 4 5。

如何获得所需的输出,是什么代码中的错误?

5 个答案:

答案 0 :(得分:2)

你可以尝试一下:

int[] array = {10,15,1,2,3,4,5,11,12};
List<Integer> tempList = new ArrayList<>(); // prepare temp list for later use
List<List<Integer>> arrays = new ArrayList<>(); // used to store the sequences
int lastNum = array[0]; // get the fist number for compasion in loop
tempList.add(lastNum);
for (int i = 1; i < array.length; i++) {
    if (array[i]-1 == lastNum) { // check for sequence (e.g fist num was 12,
      // current number is 13, so 13-1 = 12, 
      // so it has the sequence), then store the number
        tempList.add(array[i]); // store it to the temp list
        lastNum = array[i]; // keep current number for the next
    } else { // if it has not the sequence, start the new sequence
        arrays.add(tempList); // fist store the last sequence
        tempList = new ArrayList() // clear for the next sequence
        lastNum = array[i]; // init the lastNumnber
        tempList.add(lastNum);
    }
}
// now iterate for the longest array
// craete an empty array to store the longest
List<Integer> longestLength = new ArrayList<>();
for (List<Integer> arr : arrays) {
    if (arr.size() > longestLength.size()) {
        // check if the current array hase the longest size than the last one
        // if yes, update the last one
        longestLength = arr;
    }
}
// at the end print the result.
System.out.println("longestLength = " + longestLength);

结果:

longestLength = [1, 2, 3, 4, 5]

答案 1 :(得分:1)

试试此代码

public class Array {
      public static void main(String args[]){

        int a[]={10,15,1,2,3,4,5,11,12};

        int ms=0;                  // starting point of max subseq
        int me=0;                   //ending point of max subseq
        int cs=0,ce=0;              //starting and ending  point of current subseq
        int max=0,c=0;           // length of max and current subseq
        for(int i=0;i<a.length-1;i++){

           if(a[i]-a[i+1]==-1){

             if(c==0)             //we found the first element of a subseq
             {
               cs=i;ce=i+1;c=2;   //made the starting of currrent seq=i, end=i+1 and length=2
              }
             else             // element is a part of subsequence but not first elem
              {
               ce=i+1;c++;     // increased current ending point
              } 

              if(c>max)          // if lenth of current subseq is now largest then update staring and ending points of max
               {
                   max=c;
                   ms=cs;
                   me=ce;
               }
             }
             else             // subseq ended
             {
             cs=0;
             ce=0;
             c=0;
              }
      }
        for(i=ms;i<=me;i++)           //printing max subsequence
         System.out.println(a[i]);
    }
    }

注意:请参阅说明评论

答案 2 :(得分:0)

如果首先对数组进行排序,则代码应该可以正常工作。你试过了吗?

答案 3 :(得分:0)

componentWillUnmount() {
    window.removeEventListener("resize", this.updateDimensions.bind(this));
}

然后

import java.util.*;
    Arrays.sort(a);

答案 4 :(得分:0)

class Test
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int a[]={10,15,1,2,3,4,5,11,12};
        Arrays.sort(a);
        ArrayList<Integer>output = new ArrayList<Integer>();
        ArrayList<Integer>temp = new ArrayList<Integer>();
        for(int i =1; i<a.length; i++){
            //If elements have difference of one, add them to temp Arraylist
            if(a[i-1] + 1 == a[i]){
                temp.add(a[i-1]);
            }
            else{
                //Add the last consecutive element 
                temp.add(a[i-1]);

                //If temp is lager then output
                if(temp.size() > output.size()){
                    output = (ArrayList<Integer>) temp.clone();
                        temp.clear();
                }           
            }
        }

        //Outside for loop, making sure the output is the longer list. This is to handle the case where the consecutive sequence is towards the end of the array
        if(temp.size() > output.size()){
            output = (ArrayList<Integer>) temp.clone();System.out.println("after clone outside for " + output.toString());
        }   
        System.out.println(output.toString());
    }

}