📜  数组中最大平衡和的Python3程序

📅  最后修改于: 2022-05-13 01:54:36.167000             🧑  作者: Mango

数组中最大平衡和的Python3程序

给定一个数组 arr[]。找到前缀和的最大值,它也是 arr[] 中索引 i 的后缀和。

例子 :

Input : arr[] = {-1, 2, 3, 0, 3, 2, -1}
Output : 4
Prefix sum of arr[0..3] = 
            Suffix sum of arr[3..6]

Input : arr[] = {-2, 5, 3, 1, 2, 6, -4, 2}
Output : 7
Prefix sum of arr[0..3] = 
              Suffix sum of arr[3..7]

一个简单的解决方案是逐一检查每个元素的给定条件(前缀和等于后缀和),并返回满足给定条件的最大值的元素。

Python3
# Python 3 program to find maximum
# equilibrium sum.
import sys
 
# Function to find maximum equilibrium sum.
def findMaxSum(arr, n):
    res = -sys.maxsize - 1
    for i in range(n):
        prefix_sum = arr[i]
        for j in range(i):
            prefix_sum += arr[j]
 
        suffix_sum = arr[i]
        j = n - 1
        while(j > i):
            suffix_sum += arr[j]
            j -= 1
        if (prefix_sum == suffix_sum):
            res = max(res, prefix_sum)
 
    return res
 
# Driver Code
if __name__ == '__main__':
    arr = [-2, 5, 3, 1, 2, 6, -4, 2]
    n = len(arr)
    print(findMaxSum(arr, n))
 
# This code is contributed by
# Surendra_Gangwar


Python3
# Python3 program to find
# maximum equilibrium sum.
 
# Function to find maximum
# equilibrium sum.
def findMaxSum(arr, n):
 
    # Array to store prefix sum.
    preSum = [0 for i in range(n)]
 
    # Array to store suffix sum.
    suffSum = [0 for i in range(n)]
 
    # Variable to store maximum sum.
    ans = -10000000
 
    # Calculate prefix sum.
    preSum[0] = arr[0]
     
    for i in range(1, n):
     
        preSum[i] = preSum[i - 1] + arr[i]
 
    # Calculate suffix sum and compare
    # it with prefix sum. Update ans
    # accordingly.
    suffSum[n - 1] = arr[n - 1]
    if (preSum[n - 1] == suffSum[n - 1]):
        ans = max(ans, preSum[n - 1])
      
    for i in range(n - 2, -1, -1):
        suffSum[i] = suffSum[i + 1] + arr[i]
        if (suffSum[i] == preSum[i]):
            ans = max(ans, preSum[i])
     
    return ans
 
# Driver Code
if __name__=='__main__':
 
    arr = [-2, 5, 3, 1,2, 6, -4, 2]
    n = len(arr)
    print(findMaxSum(arr, n))
     
# This code i contributed by pratham76


Python3
# Python3 program to find
# maximum equilibrium sum.
import sys
 
# Function to find
# maximum equilibrium sum.
def findMaxSum(arr,n):
     
    ss = sum(arr)
    prefix_sum = 0
    res = -sys.maxsize
     
    for i in range(n):
        prefix_sum += arr[i]
         
        if prefix_sum == ss:
            res = max(res, prefix_sum);
             
        ss -= arr[i];
         
    return res
  
# Driver code  
if __name__=="__main__":
     
    arr = [ -2, 5, 3, 1,
             2, 6, -4, 2 ]
    n = len(arr)
     
    print(findMaxSum(arr, n))
 
# This code is contributed by rutvik_56


输出 :
7

时间复杂度: O(n 2 )
辅助空间: O(n)

更好的方法是遍历数组并将每个索引的前缀和存储在数组presum[]中,其中presum[i]存储子数组arr[0..i]的和。再次遍历数组并将后缀和存储在另一个数组 suffsum[] 中,其中 suffsum[i] 存储子数组 arr[i..n-1] 的和。在此之后为每个索引检查 presum[i] 是否等于 suffsum[i] 并且如果它们相等,则将它们的值与迄今为止的总体最大值进行比较。

Python3

# Python3 program to find
# maximum equilibrium sum.
 
# Function to find maximum
# equilibrium sum.
def findMaxSum(arr, n):
 
    # Array to store prefix sum.
    preSum = [0 for i in range(n)]
 
    # Array to store suffix sum.
    suffSum = [0 for i in range(n)]
 
    # Variable to store maximum sum.
    ans = -10000000
 
    # Calculate prefix sum.
    preSum[0] = arr[0]
     
    for i in range(1, n):
     
        preSum[i] = preSum[i - 1] + arr[i]
 
    # Calculate suffix sum and compare
    # it with prefix sum. Update ans
    # accordingly.
    suffSum[n - 1] = arr[n - 1]
    if (preSum[n - 1] == suffSum[n - 1]):
        ans = max(ans, preSum[n - 1])
      
    for i in range(n - 2, -1, -1):
        suffSum[i] = suffSum[i + 1] + arr[i]
        if (suffSum[i] == preSum[i]):
            ans = max(ans, preSum[i])
     
    return ans
 
# Driver Code
if __name__=='__main__':
 
    arr = [-2, 5, 3, 1,2, 6, -4, 2]
    n = len(arr)
    print(findMaxSum(arr, n))
     
# This code i contributed by pratham76


输出:
7

时间复杂度: O(n)
辅助空间: O(n)

进一步优化:
我们可以通过首先计算总和,然后使用它来查找当前前缀和后缀总和来避免使用额外的空间。

Python3

# Python3 program to find
# maximum equilibrium sum.
import sys
 
# Function to find
# maximum equilibrium sum.
def findMaxSum(arr,n):
     
    ss = sum(arr)
    prefix_sum = 0
    res = -sys.maxsize
     
    for i in range(n):
        prefix_sum += arr[i]
         
        if prefix_sum == ss:
            res = max(res, prefix_sum);
             
        ss -= arr[i];
         
    return res
  
# Driver code  
if __name__=="__main__":
     
    arr = [ -2, 5, 3, 1,
             2, 6, -4, 2 ]
    n = len(arr)
     
    print(findMaxSum(arr, n))
 
# This code is contributed by rutvik_56


输出 :
7

时间复杂度: O(n)
辅助空间: O(1)

有关更多详细信息,请参阅有关数组中最大平衡和的完整文章!