最大子数组-python实现

本文介绍了如何使用动态规划法解决最大子数组问题。递归方法虽然经典,但复杂,而动态规划法则更为简洁。通过迭代,当遇到子数组和小于0时,舍弃原有子数组,继续寻找新的子数组。动态规划法可以方便地找到最大子数组的起始和终止元素。
摘要由CSDN通过智能技术生成

最近在看算法导论,在第三章看到用递归查找的方法找出最大子数组,理解很容易,但是还是有些复杂,就在网上看了一下大牛写的动态规划法,明显简单多了。故想分享给小伙伴。由于递归方法很经典,所以也再次介绍一下。

递归方法即使将一个数组以二分法进行分成若干个子数组,在合并成所求的子数组
def max_child(arr,low,high):
if arr[low]=arr[high]:
return arr[low]
mid=(low+high)//2

  m1=max_child(arr,low,mid)
  m2=max_child(arr,mid+1,hig
  max_left=arr[mid]
  left=arr[mid]
  for i in range(mid-1,low-1,-1):
               max_left=max_left+arr[i]
               if max_left>left:
                    left=max_left

  max_right=arr[mid+1]
  right=arr[mid+1]
  for j in range(mid+2,high+1)
          max_right=max_right+arr[j]
          if max_right>right
          right =max_right
m3=left+right
result=max(m1,m2,m3)
return result

arr=[]#任意一个数组
print(max_child(arr,0,len(arr)-1))
这种方法不好得到最大子数组的起始和终止元素的坐标

动态规划法用于求最大子数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值