c - 优化数组的双重迭代

标签 c arrays for-loop optimization

我有以下代码,是我为编码竞赛中的练习问题编写的,但是当我运行它时,我会超时。主要的罪魁祸首(我猜)是运行时间为 O(n^2) 的双 for 循环。有什么办法可以优化这段代码吗?我尝试过搞乱内存,但我不知道该怎么做。

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;
}

最佳答案

我不确定发布的代码片段的目标,但以下建议的代码可能有助于缩短执行时间:

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;
}

关于c - 优化数组的双重迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45821730/

相关文章:

c++ - 指向数组的指针和指向数组第一个元素的指针之间的区别

c - C 的 std::unordered_set(int) 容器库

javascript - jQuery:检查数组是否为多维的函数

python - 使用 Python for 循环更改变量名

c - Visual Studio 2008 错误的源行

python - 协议(protocol)中的 CRC 计算不正确。一种是使用zlib实现的,另一种是用函数计算的

r - 如何在 R 中使用冒号运算符编写 Java 风格的 for 循环?

perl - 为什么添加或删除换行符会改变这个 perl for 循环函数的方式?

javascript - 为什么我不能在一个对象内的数组中展开,而该对象具有被过滤的同一级别的另一个对象

PHP 数组引用混淆