题目
给你一个整数数组
n
u
m
s
nums
nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
输入:
n
u
m
s
=
[
−
2
,
1
,
−
3
,
4
,
−
1
,
2
,
1
,
−
5
,
4
]
nums = [-2,1,-3,4,-1,2,1,-5,4]
nums=[−2,1,−3,4,−1,2,1,−5,4]
输出:
6
6
6
解释:连续子数组
[
4
,
−
1
,
2
,
1
]
[4,-1,2,1]
[4,−1,2,1] 的和最大,为
6
6
6 。
思路
- 动态规划
- 设 n u m s [ i ] nums[i] nums[i] 为结尾且和最大的子数组的和为 f ( i ) f(i) f(i)
- 易得 f ( i + 1 ) = m a x ( f ( i ) + n u m s [ i + 1 ] , n u m s [ i + 1 ] ) f(i+1)=max(f(i)+nums[i+1], nums[i+1]) f(i+1)=max(f(i)+nums[i+1],nums[i+1])
- 找到最大的 f ( i ) f(i) f(i) 即可
代码
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n = nums.size();
// int ret = nums[0];
int temp_max = nums[0];
int ret = temp_max;
for(int i = 1; i < n; i++){
temp_max = max(temp_max+nums[i], nums[i]);
if(ret<temp_max){
ret = temp_max;
}
}
return ret;
}
};