2017-08-22 14 views
-1

私はコード競争の練習問題のために書いた次のコードを持っていますが、実行すると時間が経ちます。主な原因(私が推測している)は、O(n^2)で実行されるdouble forループです。このコードを最適化する方法はありますか?私は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; 
} 
関連する問題