最大和连续子数组的Python程序

本文概述

编写一个有效的程序, 以在具有最大和的一维数字数组中找到连续子数组的和。

卡丹算法

python

# Python program to find maximum contiguous subarray
   
# Function to find the maximum contiguous subarray
from sys import maxint
def maxSubArraySum(a, size):
       
     max_so_far = - maxint - 1
     max_ending_here = 0
       
     for i in range ( 0 , size):
         max_ending_here = max_ending_here + a[i]
         if (max_so_far <max_ending_here):
             max_so_far = max_ending_here
  
         if max_ending_here <0 :
             max_ending_here = 0   
     return max_so_far
   
# Driver function to check the above function 
a = [ - 13 , - 3 , - 25 , - 20 , - 3 , - 16 , - 23 , - 12 , - 5 , - 22 , - 15 , - 4 , - 7 ]
print "Maximum contiguous sum is" , maxSubArraySum(a, len (a))
   
# This code is contributed by _Devesh Agrawal_

输出如下:

Maximum contiguous sum is -3

如果我们将max_so_far与max_ending_here进行比较, 则仅当max_ending_here大于0时, 才能进一步优化上述程序。

python

def maxSubArraySum(a, size):
      
     max_so_far = 0
     max_ending_here = 0
      
     for i in range ( 0 , size):
         max_ending_here = max_ending_here + a[i]
         if max_ending_here <0 :
             max_ending_here = 0
          
         # Do not compare for all elements. Compare only   
         # when  max_ending_here> 0
         elif (max_so_far <max_ending_here):
             max_so_far = max_ending_here
              
     return max_so_far

请参考完整的文章最大总和连续子数组更多细节!

来源:

https://www.srcmini02.com/70118.html

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?