Advertisement

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)

还没有任何评论哟~