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]
给定一个数组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]
相关文章推荐
- 每天一道LeetCode----从数组中选择若干不连续元素使得总和最大
- LeetCode之连续子数组的最大和
- 通过3(2/n)次比较同时找到数组最大和最小值(python)
- LeetCode-two sum:python解答数组问题
- LeetCode (20) house robber (数组不相邻元素最大值)
- python如何将数组分成几个区间,取每个区间的最大值存到另一个数组里
- [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字
- LeetCode--Largest Number(最大数字)Python
- LeetCode 643.Maximum Average Subarray 最大子数组的平均值
- [LeetCode] Maximum Sum of 3 Non-Overlapping Subarrays 三个非重叠子数组的最大和
- LeetCode-连续子数组的最大和
- [Leetcode-53]Maximum Subarray 最大子数组和
- leetcode:排序数组之后相邻数的最大差
- [leetcode 53] Maximum Subarray----最大子数组的和
- Leetcode121.+Leetcode53. Kadane算法解决最大子数组问题
- LeetCode 624. Maximum Distance in Arrays (在数组中的最大距离)$
- [leetcode]53. Maximum Subarray 最大连续子串python实现【medium】
- [leetcode]53. Maximum Subarray 最大连续子串python实现【medium】
- 利用python求数组中连续k个相同值的最大的k
- LeetCode-643:Maximum Average Subarray I (k个元素的最大子数组)