53. 最大子序和
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-subarray/
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
输入:nums = [1]
输出:1
输入:nums = [0]
输出:0
输入:nums = [-1]
输出:-1
感想
以前在头条面试的时候遇到这个题目,当时应该是知道暴力算法,但是又不愿意使用暴力算法,鼓捣了半天没有做出来。最近在集中学习动态规划,刷到的简单难度的第一道题目就是这个,结果使用动态规划的方式还是很难独自完成。
解法1:一维动态规划
这道题目可以使用一维dp来剞劂,按照动态规划三大步来分析:
(1)定义数组元素含义
首先定义dp[i]
的含义:遍历到数组第i
个元素时的最大子序列
(2)找出数组元素之间的关系式
dp[i]
是遍历到当前的最大子序列,只需要将dp[i - 1]
与