题目名称:连续子数组的最大和
将输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
例如:
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
问题描述:
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:88878
本题知识点:动态规划
代码分析:
在此代码中,我们使用的方法是动态规划,首先建立一个动态值dp.这个dp用来保存当前连续子数组的和,我们通过遍历整个nums,来获得连续最大子数组的和,具体操作如下:
首先令dp初始状态为nums[0]也就是数组的第一个元素。若遍历往后的元素。若dp为正,则说明到目前为止都是正收益。就可以继续往do上进行累加。每增加一次都要和max进行对比,以更新最大值。若dp在累加过程中变成了负数,则说明产生了负收益。则将dp变成nums[i-1]。每次判断结束之后,都和上一个最大的状态进行比较。若当前状态更大,则将当前状态赋予给最大状态。最后返回最大状态
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
#
# @param l1 ListNode类
# @param l2 ListNode类
# @return ListNode类
#
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
max=dp=nums[0]
for i in range(len(nums)-1):
if dp<0:
dp=nums[i+1]
else:
dp=dp+nums[i+1]
if dp>max:
max=dp
return max