最大子数组两种解法

最大子数组

1,暴力法

def getMaxNumList(numlist):
    max=0
    curtotal=0
    startidx = 0
    endidx = 0
    mylen = len(numlist)
    for idx in range(mylen):
        curtotal = 0
        curtotal += numlist[idx]
        for k in range(idx+1,mylen):
            curtotal += numlist[k]
            if curtotal > max:
                max = curtotal
                startidx = idx
                endidx = k
            elif curtotal == max:
                print curtotal
                print "startidx %s, endidx %s" % (idx,k)
    print "startidx %s, endidx %s" % (startidx,endidx)

2, 动态规划

def MaxSubArray(nums):
    n = len(nums)
    dp = []
    dp.append(nums[0])
    mymax = dp[0]
    startidx = 0
    endidx = 0
    for i in range(1, n):
        if dp[i-1] + nums[i] <= nums[i] and dp[i-1] + nums[i] > 0:
            # print "startidx:%d" % i
            startidx = i
        dp.append(max(dp[i-1] + nums[i], nums[i]))
        if dp[i] > mymax:
            # print "endidx:%d" % i
            endidx = i
        mymax = max(dp[i], mymax)
    # print mymax
    return mymax, startidx, endidx
posted @ 2020-09-18 10:55  Leon呀  阅读(175)  评论(0)    收藏  举报