如何从Hackerrank优化沙漏计划?

时间:2017-08-01 20:37:16

标签: java multidimensional-array

这是沙漏问题,可以在Hackerrank网站上找到。

以下是问题的链接:Hourglass

以下是我为沙漏问题编写的代码:

::Indexex

我的问题

现在,上面的代码已成功编译并运行,甚至通过了所有测试用例。但是,我的代码需要O(n ^ 2)时间(此处矩阵的大小为6,但如果大小为n,则完成时间为O(n ^ 2)。)

创建数组需要O(n ^ 2)时间,而我并不关心。我感兴趣的是优化沙漏()方法,其中需要O(n ^ 2)时间来计算沙漏的总和。

那么,有没有办法通过进一步优化来实现上述问题?

是否有可能在O(n)时间内解决问题?

事实上,我试图通过删除沙漏()方法中的内部循环来解决O(n)时间内的问题,但它似乎没有用。

P.S。我不需要工作代码,我需要的只是指向可能的改进(如果有的话)或最多的算法。

提前致谢!

1 个答案:

答案 0 :(得分:1)

从技术上讲,你的解决方案已经是O(n)了。您将“n”定义为2d数组的一侧,但如果您将n视为板上的唯一位置,则n是row * col的组合。以这种方式重新定义,你不能在这个问题上击败O(n)。

但是,您可以优化一些。你实际上是将3x3瓷砖铺设在6x6板上。如果要在3x3磁贴的左上角定义展示位置,那么您将尝试所有36个展示位置。如果您考虑一下,许多放置会让您的瓷砖悬挂在电路板的边缘。你真的只需要考虑前4x4位置而不是所有6x6位置。它仍然是一个O(n)解决方案,但它会将36次迭代减少到16次。