Geben Sie diesen Code zu verstehen:den folgenden Code
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;
}
Hier ist, was ich glaube, ich weiß:
1) int *jumps = calloc(X+1, sizeof(int));
Dieses ein Array macht X + 1 Elemente eines int-Typ zu speichern. Da es calloc
ist alles wie 0.
2) if(A[i]<=X && *(jumps+A[i])!=1)
Dieses initialisiert sie if-Anweisung der Bedingung ist, dass das Element der A
bei Index i kleiner als oder gleich X
und den zweiten Teil I mit verwirrt bin. Ich bin total verwirrt was *(jumps+A[i])!=1)
bedeutet. Ich weiß, dass was auch immer *(jumps+A[i])
ist kann nicht gleich 1.
3) if(++counter==X)
Das verwirrt mich auch. Ich bin mir nicht sicher, was ++
vor counter
tut. Ich dachte, ++
wurde verwendet, um ein Inkrement von 1 zu etwas hinzuzufügen. Wie ändert sich auch counter
? Wenn man das Beispiel (5, [1,3,1,4,2,3,5,4]) angibt, ändert es sich zu 5, aber ich verstehe nicht warum.
Sorry erstes Mal Posting. Ich habe versucht, es hübscher aussehen zu lassen, aber ich weiß nicht, warum alles zusammengespielt hat. –