2016-04-18 91 views
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,但我不明白爲什麼。

+0

對不起,第一次發佈。我試圖讓它看起來更漂亮,但我不知道爲什麼它們都在一起。 –

回答

0

所以這是我的理解:

  1. 每值一個是優於X被忽略。 (A[i] <= X
  2. A中的每個重複值都被忽略:這是(jumps+A[i])語句的用途。
  3. 最後如果您的A數組包含次於X.至少X唯一值它將返回電流環路的索引

結論:如果X是10。然後它會返回A的索引,當一旦它們的順序無效,函數就會找到從0到9的每個值。如果未找到,則返回-1。 ++計數器使它停止9而不是10.