Java:在列表中查找所有顺序模式

时间:2014-08-12 02:24:51

标签: java

我有一个整数列表,例如{1,2,3 ,, 5,7,8,9}。我想要做的是能够将其分解为{1,2,3}和{7,8,9}。我知道代码

    boolean flag = true;
    for( int i = 0; i < results.size()-1; i++ ) {
        if( results.get(i+1) != results.get(i)+1 ) {
            flag = false;
            break;
        }
    }

但这只会从第一个值开始找到它们(情况并非总是如此),并且只会找到一个。

3 个答案:

答案 0 :(得分:2)

试试这个,

public void seqList() {
    List<Integer> results= Arrays.asList(1,2,3,5,4,7,8,9,101,102,13,14,15,14,16);

    List<List<Integer>> allSeqList = new ArrayList<>();
    Integer oldVal = null;      
    List<Integer> subList = null;
    Integer lastElement = 1;

    for (Integer value : results) {         
        if (oldVal!=null && value == oldVal + 1) {
            if(subList==null){
                subList= new ArrayList<>();                 
            }
            if(subList.size()==0){
                subList.add(value-1);
            }
            subList.add(value);
        }else{
            if(subList!=null){
                allSeqList.add(subList);
            }

            subList=null;
        }
        if(subList!=null && lastElement==results.size()){
            allSeqList.add(subList);
        }
        lastElement++;
        oldVal=value;
    }

    System.out.println(allSeqList);
}

答案 1 :(得分:1)

如果它是当前数组之前的序列号,则可以在检查下一个数组的同时操作标志并遍历数组。

<强>样品:

int []i = {1,2,3,5,7,8,9,11,12,16,17,18};
    boolean flag = true;
    for(int i2 = 0; i2 < i.length; i2++)
    {
        if(i2+1 < i.length && i[i2+1] == i[i2]+1) {
            System.out.print(i[i2] + " ");
            flag = true;
        }
        else {
            if(flag)
                System.out.print(i[i2]);
            flag = false;
            System.out.println();
        }

<强>结果:

1 2 3
7 8 9
11 12
16 17 18

答案 2 :(得分:0)

我的方法将答案存储在List<List<Integer>>

ArrayList<List<Integer>> cont = new ArrayList<List<Integer>>();
List<Integer> list = Arrays.asList(1,2,3,5,7,8,9,10,11,13,14,15);
int start = -1;
for(int i = 1;i<list.size();i++){
    if(list.get(i-1)+1 == list.get(i)){
        if(start == -1)
            start = i-1;        
        else if(i==list.size()-1)
            cont.add(list.subList(start,i+1));
    }
    else if(start != -1){
        cont.add(list.subList(start, i));
        start = -1;
    }
}
for(List<Integer> l:cont)
    System.out.println(l);

输出:

[1, 2, 3]
[7, 8, 9, 10, 11]
[13, 14, 15]