打印总和为0的所有子数组

时间:2019-08-10 12:41:48

标签: arrays algorithm time-complexity subset

给出一个数组,打印该数组中所有总和为0的子数组。

Example-:
     Input:  arr = [6, 3, -1, -3, 4, -2, 2,
                     4, 6, -12, -7]
     Output:  
            Subarray found from Index 2 to 4
            Subarray found from Index 2 to 6          
            Subarray found from Index 5 to 6
            Subarray found from Index 6 to 9
            Subarray found from Index 0 to 10

我在极客身上看到了这种解决方案: https://www.geeksforgeeks.org/print-all-subarrays-with-0-sum/
但是我想知道他们是否有办法解决时间复杂度小于O(n ^ 2)的问题。

1 个答案:

答案 0 :(得分:1)

简短答案:输出比例为 O(n 2 ,因此我们无法对其进行改进。此外,给定比例尺的链接算法,因为地图在 O(1)中与输出呈线性关系,因此在时间复杂度方面是最佳的。


想象一个只有零的 n 个数字数组。这意味着每个子列表的总和为零。因此,我们必须打印 O(n 2 结果。最坏的情况是,此问题本质上是 O(n 2 ,因为它有时具有 O(n 2 在输出中。

请注意,您所引用的实现平均可以快得多,因为它会将每个前缀与该前缀的总和一起存储在键中。根本没有说每个项目都有线性的“ co-sum”。此外,该算法在输出的大小上运行 linear ,因此在时间复杂度方面是最佳的。这里我们假设可以在 O(1)中执行在地图中的插入和查找。