【问题标题】:To return subarray as well alongside maximum sum of subarray using kadane's algorithm使用 kadane 算法返回子数组以及子数组的最大总和
【发布时间】:2021-05-14 12:57:49
【问题描述】:

我的这段代码使用 kadane 算法返回子数组的最大总和。 我可以对此代码进行哪些更改以返回与最大总和对应的子数组?

def maxSubArray(a,size):
    curr_max=a[0]
    max_so_far=a[0]
    
    for i in a[1:]:
        curr_max=max(a[i],curr_max+a[i])
        max_so_far=max(max_so_far,curr_max)
    return max_so_far
a = [-2, -3, 4, -8, -2, 1, 5, -3] 
maxSubArraySum(a,len(a))

【问题讨论】:

    标签: python arrays sub-array


    【解决方案1】:

    这是一个计算最大和和相应的连续子数组的解决方案。它使用带有 i 的单个 for 循环。然后 j 落后于 i 并且有条件地提前。 j 和 i 帮助设置迄今为止提供最大总和的子数组的开始和结束索引。最后,开始和结束索引用于对数组进行切片并返回子数组。

    def maxSubArraySum(a):
        max_so_far = 0
        current_max = 0
        start_index = 0
        end_index = 0
        j = 0 #trails i in the following loop. i and j help set start and end indexes
    
        for i in range(len(a)):
            current_max += a[i]
    
            if current_max > max_so_far:
                max_so_far = current_max
                start_index = j
                end_index = i
    
            # reset current max if negative and advance j
            if current_max < 0:
                current_max = 0
                j = i + 1
    
        result_array = a[start_index: end_index+1]
        print(f"Max sum is {max_so_far} for contiguous subarray: {result_array}")
    
    maxSubArraySum([-2, -3, 4, -8, -2, 1, 5, -3])
    
    #Output: Max sum is 6 for contiguous subarray: [1, 5]
    

    【讨论】:

    • 你为什么先把j取为0?
    • J 是一个索引,就像 I 一样,从 0 开始。我可以在 i 和 j 中编写两个嵌套循环来帮助跟踪子数组的开始和结束,但是这样做降低复杂性。
    猜你喜欢
    • 2019-10-13
    • 2011-12-08
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多