我有一个整数列表,例如{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;
}
}
但这只会从第一个值开始找到它们(情况并非总是如此),并且只会找到一个。
答案 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]