最大子数组和
最大子数组和
给你一个整数数组 nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组
是数组中的一个连续部分。
示例 1:
1 | 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] |
示例 2:
1 | 输入:nums = [1] |
示例 3:
1 | 输入:nums = [5,4,-1,7,8] |
提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
使用动态规划,f[i]
表示以i
结尾的最大连续子数组和
显然f[i]=max(f[i-1]+nums[i],nums[i])
。因为f[i]
必须要以i
做结尾,所以必须包含nums[i]
,f[i]
就是f[i-1]+nums[i]
和nums[i]
中较大的那一个
1 | class Solution { |
由于每一次循环都只用到了f[i]
和f[i-1]
,所以空间复杂度还可以优化
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 面试资料!