zoukankan      html  css  js  c++  java
  • 最大子数组问题

    一,最大子数组问题

    用分治思想去求解。

    把数组分为左右两个数组,左边的数组求出最大子数组,右边也求出最大子数组,若两个数组是连续的,则求出的最大子数组跨过中点,可以合并。

    下例没有使用递归。

    
    
    '''
    求最大子数组问题
    '''
    def find_max_array(list):
    l = 0
    r = len(list)
    if l==r:
    return list
    else:
    mid = (l+r)//2
    l_list = list[l:mid]
    r_list = list[mid:r]

    lmax = 0
    lsum = 0
    xuhao1 = []
    for i in range(mid-1,l-1,-1):
    lsum = lsum + l_list[i]
    if lsum > lmax:
    lmax = lsum
    xuhao1.append(i)
    if len(xuhao1) == 0:
    pass
    else:
    l_min_xuhao = min(xuhao1)
    l_max_xuhao = max(xuhao1)

    rmax = 0
    rsum = 0
    xuhao2 = []
    for j in range(mid,r):
    rsum = rsum + list[j]
    if rsum > rmax:
    rmax = rsum
    xuhao2.append(j)
    if len(xuhao2) == 0:
    pass
    else:
    r_min_xuhao = min(xuhao2)
    r_max_xuhao = max(xuhao2)

    sum_l_r = lmax + rmax

    if sum_l_r > lmax and sum_l_r > rmax:
    print(list[l_min_xuhao:r_max_xuhao+1])

    else:
    if lmax > rmax:
    print(list[l_min_xuhao:l_max_xuhao])
    else:
    print(list[r_min_xuhao:r_max_xuhao])

    list =[-3,3,4,-2,3,-1,-2,-3,-4,5]
    find_max_array(list)
    '''
    [13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7] --> [18, 20, -7, 12]

    '''
    
    
  • 相关阅读:
    洛谷 P1767 家族_NOI导刊2010普及(10)
    洛谷 P2919 [USACO08NOV]守护农场Guarding the Farm
    COGS 1619. [HEOI2012]采花
    UVA 11181 Probability|Given
    hdu 3336 Count the string
    洛谷 P2176 [USACO14FEB]路障Roadblock
    洛谷 P2691 逃离
    BZOJ 1040: [ZJOI2008]骑士
    vijos 1320 清点人数
    POJ 3417 Network
  • 原文地址:https://www.cnblogs.com/two-peanuts/p/11118900.html
Copyright © 2011-2022 走看看