提供此代码:
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语句的条件是索引i的A
元素小于或等于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,但我不明白为什么。
答案 0 :(得分:0)
所以这就是我的理解:
A[i] <= X
)(jumps+A[i])
语句的目的。结论:如果X是10.那么它将返回A的索引,当函数无论它们的顺序是什么时都会找到从0到9的每个值。如果没有找到返回-1。 ++计数器使它停止9而不是10。