Python 子阵和为零的阵列生成算法
我试图随机生成一个范围在-10^7到10^7之间的整数数组,这样就存在一个和为零的子数组 例如:76448-4-8 1答案取决于您希望数组的随机性。就像前面提到的一些注释一样,您可以始终包含一个零,因此保证有一个和为零的子阵列。我认为这将有助于最终的解决方案,所以我想提到的是,您可以检查一个数组是否在^2时间内有一个和为零的子数组Python 子阵和为零的阵列生成算法,python,c++,arrays,algorithm,Python,C++,Arrays,Algorithm,我试图随机生成一个范围在-10^7到10^7之间的整数数组,这样就存在一个和为零的子数组 例如:76448-4-8 1答案取决于您希望数组的随机性。就像前面提到的一些注释一样,您可以始终包含一个零,因此保证有一个和为零的子阵列。我认为这将有助于最终的解决方案,所以我想提到的是,您可以检查一个数组是否在^2时间内有一个和为零的子数组 def array_has_zerosubarray( A ): for _begin in xrange(0,len(A)-1): for _
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
一个快速的技巧是确保将零作为元素之一,并随机生成所有其他元素。然后你总是保证有一个子数组大小为1,和为零。生成一个随机数组,然后选择一个随机子集。将其总和的负数添加到数组中。不知道这是什么分布。这只是一个建议。所以拿一个小数字的列表,做“x*1941212119%123123457”之类的事情?你可以用随机数生成任何数组,如果有0,计算它们的和,继续,如果没有,添加相应的必要元素以确保和0,例如:如果它生成了12-5,你需要加2使和为0,然后再次生成随机元素,放在开头和结尾,直到达到预期大小。@gmfreak我不认为您上面给出的代码归类为暴力。事实上,这和在某处插入一个零没有什么不同。真正的蛮力是随机生成所有元素,然后检查是否存在总和为零的子数组,如果不存在,则冲洗并重复。谢谢。它可以按时完成。
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