最大子数组两种解法
最大子数组
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
浙公网安备 33010602011771号