在O(nlogn)时间复杂度中找到总和为0的子数组(使用分而治之?)>

问题描述 投票:1回答:1

我在网上看到了解决方案,但是所有解决方案的时间复杂度均为O(n)或O(n ^ 2)。我想知道是否有可能在不使用辅助数据结构的O(nlogn)中找到总和为0的子数组。但是,我们可以使用递归。

我们可以修改最大子数组和算法以找到解决此问题的方法吗?

输入数组将只有1和-1,并且算法将找到总和为0的子数组。

输入= {1,1,-1,1,-1,-1,1,-1}

输出= 1,8(1是起始索引,8是最后索引)

在这种情况下,整个输入数组的总和等于0。因此,报告的起始索引和结束索引分别为1和8(假设数组中的索引从1开始)。

编辑:我们可以使用该问题的解决方案来解决另一个问题。该问题如下。

给出n个整数的数组arr,找到具有相等数量的偶数和奇数元素的最长连续子数组。以下是一个示例(索引从1开始):

A = {8,2,-3,4,9,6}

答案:(2,5)。 (2是起始索引,5是最后索引)

唯一的约束是该算法不能使用任何辅助数据结构。在这种约束下,解决方案必须是最有效的。另外,允许使用递归。

我在网上看到了解决方案,但是所有解决方案的时间复杂度均为O(n)或O(n ^ 2)。我想知道是否有可能在不使用辅助数据的O(nlogn)中找到总和为0的子数组...

algorithm divide-and-conquer
1个回答
0
投票

您可以使用递归算法,其中该函数获取上一个数组值(如果有)的值,然后从输入数组中读取下一个值。如果它是相同的值,那么它将递归调用自身,当从那里返回时,它将以相同的方式继续下一个值。如果它是相反的值,则返回到调用方true -表示总和为零。如果遇到数组的末尾,则函数返回false

© www.soinside.com 2019 - 2024. All rights reserved.