0
int[] big = {1,2,3,5,11,12,13,25,26};

doSomething 隣接する要素をまとめて、「大きな」をこれに分割する方法:

{{1,2,3},{5},{11,12,13},{25,26}}

私はこのコードから始めました:

public List<Integer> getR(){
    Integer[] big = {1,2,3,5,11,12,13,25,26};
    List<Integer> a = new ArrayList<Integer>();
    for(int i=0;i<big.length;i++){
        if(big[i]==big[i+1]-1){
            continue;
        }else{
            //...
        }
        //...
    }
    //...
}
4

5 に答える 5

2

結果の配列は2次元配列であり、Javaでは次のようなものが許可されています。

int[][] split = new int[4][]; 
split[0] = new int[3];
split[1] = new int[1];
split[1] = new int[3];
split[1] = new int[2];
//note: you can use variables instead integer values (like 4, 3, 2, ...) here

その情報を利用して、新しい配列を形成できます。


アップデート

List<List<Integer>> result = new ArrayList<List<Integer>>();
List<Integer> curr = null;
for (int i = 0; i < big.length; i++) {
    if(i == 0 || (big[i] != big[i-1]+1)) { 
        //if the current element is the first element or doesn't satisfy the condition
        curr = new ArrayList<Integer>(); //create a new list and set it to curr
        result.add(curr); //add the newly created list to the result list
    }
    curr.add(big[i]); //add current element to the curr list
}
于 2013-06-17T23:51:46.857 に答える
0

メナの答えに基づく別の答えがあります

int[] flag=new int[big.length];
int j=0;
flag[0]=0;
for(int i=1;i<big.length;i++){
if(!big[i-1]+1==big[i]) j++;
flag[i]=j;
}

出力は次のようになります: 0 0 0 1 2 2 2 3 3、ご覧のとおり、これを解決する方法も考えられます

于 2013-06-18T02:18:31.850 に答える
0
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class testSth {

    public List<List<Integer>> getR(){
    Integer[] big = {1,2,3,5,11,12,13,25,26};
    List<Integer> a = Arrays.asList(big);
    List<List<Integer>> all = new ArrayList<List<Integer>>();

    for(int i=0;i<a.size();i++){
        List<Integer> b = new ArrayList<Integer>();
        if(a.get(i)==a.get(i+1)-1){
        b.add(a.get(i));
        }else{
        b.add(a.get(i));
        all.add(b);
        }
    }
    return all;
    }
}
于 2013-06-18T00:33:57.977 に答える