生成子数组和为零的数组的算法
Algorithm for generating an array with a subarray sum of zero
我正在尝试随机生成一个范围在-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
相关文章:
- 为什么我的排序算法会更改数组值
- 使用指针算法修改函数中的 2D 数组
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 通过指针算法计算数组长度
- 计算数组重复次数的组合的有效算法,加起来达到给定的总和
- 为什么在此排序算法实现中,向量明显比数组慢?
- C++线性搜索算法,确定数组中元素的数量
- 在矢量数组C++中使用算法库操作
- 数组 X[n] 仅存储名称.编写算法以在数组中插入或删除 ITEM
- 使用简单的暴力算法找到数组中最大的4个元素
- 计算数组中存在其总和的对数的算法
- 我是 c++ 的新手,有没有一种算法可以找到 3d 数组中最接近的 0 的距离?
- 使用指针算法调用结构内的结构数组
- 使用动态数组对算法编译器错误进行排序
- 如何在没有 c++ 中的数组/算法的情况下对两个条件的字符串进行排序
- 分而治之数组算法++
- c++ 插入数组算法故障
- 使用后缀数组算法进行Burrows-Wheeler变换
- 数组算法的组合
- 后缀数组算法