2017-08-22 50 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; 
}