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,但我不明白爲什麼。
對不起,第一次發佈。我試圖讓它看起來更漂亮,但我不知道爲什麼它們都在一起。 –