Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 子阵和为零的阵列生成算法_Python_C++_Arrays_Algorithm - Fatal编程技术网

Python 子阵和为零的阵列生成算法

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 _

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

例如:76448-4-8

1答案取决于您希望数组的随机性。就像前面提到的一些注释一样,您可以始终包含一个零,因此保证有一个和为零的子阵列。我认为这将有助于最终的解决方案,所以我想提到的是,您可以检查一个数组是否在^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

一个快速的技巧是确保将零作为元素之一,并随机生成所有其他元素。然后你总是保证有一个子数组大小为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