索引列表的组合

时间:2016-01-19 01:06:39

标签: java arrays combinations

我有一个列表,我比较它的排列(不包括它自己)。例如,假设我有一个列表R = {1,2,3,4,5}。我有输出O = {12,13,14,15,23,24,25,34,35,45}。现在问题出在这里。我必须将输出与我将其存储在列表中的预期输出进行比较(与O相同)。但我不知道如何以这种方式索引O [?]。 这是我比较数组的代码。

int [] arr = new int[]{1,2,3,4,5};
int [] expected = new int[]{3,4,5,6,5,6,7,7,8,9};
for(int i=0; i<arr.length - 1; i++){
      for(int j=i+1; j<arr.length; j++){
           int temp = arr[i] + arr[j];
           if(temp == expected[?]){
                 #logic
           }
       }
 }

如何索引expected[~]?谢谢。

这是我正在分析的图表:

i   |   j   |   index
0       1         0
0       2         1
0       3         2
0       4         3
1       2         4
1       3         5
1       4         6
2       3         7
2       4         8
3       4         9

1 个答案:

答案 0 :(得分:1)

史蒂文 - 我相信如果你把一个索引计数器嵌套在j循环中,它会保留你想要的序列...请确认

int [] arr = new int[]{1,2,3,4,5};
int [] expected = new int[]{3,4,5,6,5,6,7,7,8,9};
int index = 0;
for(int i=0; i<arr.length - 1; i++){
  for(int j=i+1; j<arr.length; j++){
       int temp = arr[i] + arr[j];
       if(temp == expected[index++]){
             #logic
       }
   }
 }

编辑:这是通用(i,j)的算法,其中N是i的最大值。

    int [] arr = new int[]{1,2,3,4,5};
    int [] expected = new int[]{3,4,5,6,5,6,7,7,8,9};
    int N = arr.length;
    for(int i=0; i<N - 1; i++){
      for(int j=i+1; j<N; j++){
           int temp = arr[i] + arr[j];
           if(temp == expected[getIndex(i,j,N)]){
                 #logic
           }
       }
     }
}

public static int getIndex(int i, int j, int N) {
    return S(N) - S(N-i) + j-i -1;
}

public static int S(int N) {
    return N * (N - 1) / 2;
}