Python能够计算长度为N的数组A中连续子数组和最接近于零的情况
发布时间
阅读量:
阅读量
零子数组
针对一个长度为N的数组A,寻找其连续子数组的和与0最为接近的数值。例如,给定数组A=[1, -2, 3, 10, -4, 7, 2, -5],在所有可能的连续子数组中,哪一个的和最接近于零?
算法思路
申请一个长度比A多1的数组sum[-1,0,…,N-1],其中sum[i]表示A的前i项和,并规定sum[-1]的值为0。将数组sum[-1,0,…,N-1]进行排序操作,随后计算排序后相邻元素之间的差值的绝对值,其中最小的差值即为在A中任意选取两个前缀子数组之和的差的最小值。对于计算前n项和数组sum以及对sum中相邻元素求差的操作,其时间复杂度均为O(N),而排序操作的时间复杂度通常被认定为O(NlogN),因此整体的时间复杂度为O(NlogN)。
Pyhton代码
# 连续子数组的和最接近0的值
def min_subarray(li):
size = len(li)
sumli = [0] * (size + 1)
for i in list(range(size)):
sumli[i + 1] = sumli[i] + li[i]
sumli.sort()
diff = abs(sumli[1] - sumli[0])
result = d
全部评论 (0)
还没有任何评论哟~
