0
给这个代码:了解下面的代码
int solution(int X, int A[], int N) {
int *jumps = calloc(X+1, sizeof(int));
int counter = 0;
int i;
for(i=0; i<N; i++) {
if(A[i]<=X && *(jumps+A[i])!=1) {
*(jumps+A[i])=1;
if(++counter==X) {
return i;
}
}
}
free(jumps);
return -1;
}
这是我想我知道:
1)int *jumps = calloc(X+1, sizeof(int));
这是使阵列中存储一个int型的X + 1组的元素。由于它是 calloc
它们都被初始化为0。
2)if(A[i]<=X && *(jumps+A[i])!=1)
这个if语句的条件是,A
元素索引i小于或等于X
和第二部分,我混淆。我完全困惑什么*(jumps+A[i])!=1)
的意思。我知道无论*(jumps+A[i])
是不能等于1.
3)if(++counter==X)
这也让我困惑。我不知道++
在counter
之前做了什么。我认为++
被用来增加1的东西。另外,counter
如何更改?如果给出例子(5,[1,3,1,4,2,3,5,4]),它会变成5,但我不明白为什么。
对不起,第一次发布。我试图让它看起来更漂亮,但我不知道为什么它们都在一起。 –