LeetCode 53.最大子数组和 题解
题目描述
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
样例
1 | 示例 1: |
1 | 示例 2: |
1 | 示例 3: |
算法1
(动态规划)
由于本题需要求数组中最大子数组的和,那么如果暴力枚举区间的起点、终点的话,需要 的时间复杂度
同时,我们能够看出,数组中每个位置代表的不仅仅是一种情况,而是一类状态的情况总和,因此可以考虑使用动态规划的思想
思路:
- 可以定义 数组来表示以 i 结尾的位置最大子数组的和
- 根据定义,我们可以分析得到:
- 若区间长度为 1, 那么 f[i] = nums[i];
- 若区间长度大于 1, 那么 f[i] = f[i - 1] + nums[i]
因此,可以得到动态规划的转移方程为:
$ f[i] = max(f[i - 1] + nums[i], nums[i])$
同时,我们可以发现:
不必开辟 的额外空间,只需要两个变量动态更新 与 即可
C++ 代码
1 | class Solution { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.