我有一个列表,我比较它的排列(不包括它自己)。例如,假设我有一个列表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
答案 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;
}