生成子数组和为零的数组的算法

Algorithm for generating an array with a subarray sum of zero

本文关键字:数组 算法      更新时间:2023-10-16

我正在尝试随机生成一个范围在-10^7到10^7之间的整数数组,这样就存在一个和为零的子数组。

例如:7 6 4 8 -4 -8

1<=Size =10^5

我可以使用蛮力来完成它,但它需要花费很多时间,因为我必须生成非常大的这样的数组。是否有任何有效的方法来实现使用python或c++?

编辑:实际上我想用不同的场景生成很多这样的数组。我正在生成这些数组作为一个问题的测试用例,以确定任何给定的正整数和负整数数组是否包含零和子数组。

尝试暴力破解代码:

import random
N = random.randint(10,100)
mylist = []
for i in xrange(1,N):
  mylist.append(random.randint(-100,100))
list2 = [1,-1]
mylist = mylist[1:N-2] + list2 + mylist[N-2:N]
print mylist

所以我必须手动调整它。

谢谢!

答案取决于如何随机您希望您的数组。就像提到的一些评论者一样,您总是可以包含一个零,从而保证具有一个和为零的子数组。我认为这对你最终的解决方案有帮助,所以我想提一下,你可以在O(N^2)时间内检查一个数组是否有一个和为零的子数组。

def array_has_zerosubarray( A ):
    for _begin in xrange(0,len(A)-1):
       for _end in xrange(_begin+1,len(A)):
           sum = 0
           for ai in range(_begin,_end):
               sum = sum + A[ai]
           if sum==0:
              return True
    return False