Дайте этот код:
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));
Это создает массив, хранящий X+1 элементов типа int. Поскольку это 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, но я не понимаю, почему.