2017-08-22 40 views
-1

我在編碼競賽中爲練習題編寫了下面的代碼,但是當我運行它時,我會隨着時間的推移。主要罪魁禍首(我猜)是在O(n^2)中運行的雙重循環。有沒有什麼辦法可以優化這個代碼?我已經嘗試與memoization搞亂,但我無法弄清楚如何做到這一點。在陣列上優化雙重迭代

for (i=n;i>0;i--){ 
    int index = linearSearch(seq,i,n); 
    int height = bricks[index]; 
    for (j=0;j<n;j++){ 
     if (j != index){ 
      if (bricks[j] >= height){ 
       while(bricks[j]>=height){ 
        bricks[j]--; 
        count++; 
       } 

       if(bricks[j] < 0){ 
        printf("-1\n"); 
        return 0; 
       } 

      } 
     } 
    } 

    bricks[index] = 0; 
    seq[index] = 0; 
} 
+4

如果這是工作的代碼,你應該把它而不是[codereview](https://codereview.stackexchange.com/)。但是在你做這件事之前**,請確保**寫出你的代碼的一個很好的解釋**,例如**文件**。 –

+2

這段代碼*應該做什麼*? –

+0

快速瀏覽一下,有很多方法可以優化這段代碼... –

回答

0

我不知道張貼代碼段的目標,但下面提出的代碼可與執行時間幫助:

for (i=n; i>0; i--) 
{ 
    int index = linearSearch(seq,i,n); 
    int height = bricks[index]; 

    for (j=0; j<n ; j++) 
    { 
     if(j != index) 
     { 
      if(bricks[j] >= height) 
      { 
       count += bricks[j] - height; 
       bricks[j] -= bricks[j] - height; 
      } 
     } 
    } 

    bricks[index] = 0; 
    seq[index] = 0; 
}