您的位置:首页 > 编程语言 > Python开发

LeetCode--Maximum Subarray(最大子数组)Python

2017-12-29 12:31 591 查看
题目:

给定一个数组nums,返回这个数组中和最大的子数组的和。如:给定数组[-2,1,-3,4,-1,2,1,-5,4],则其和最大的子数组为[4,-1,2,1],返回它们的和6.

解题思路:

考虑用动态规划解题。只需要找到递归式即可。从数组中的第一个数字进行遍历,维护两个值,当前的全局最优解(global)和当前的局部最优解(local)。遍历到第i个数字时,局部最优一定包含当前的数字,则 local[i] = max( local[i-1]+nums[i] , nums[i] ), 全局最优解则是之前的全局最优或者是当前的局部最优 global[i] = max( global[i-1] , local[i] ).

代码如下:

class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
global_n = [0]*len(nums)
local_n = [0]*len(nums)
global_n[0] = nums[0]
local_n[0] = nums[0]
for i in range(1,len(nums)):
local_n[i] = max(nums[i],nums[i]+local_n[i-1])
global_n[i] = max(local_n[i],global_n[i-1])
return global_n[len(nums)-1]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: