Given an integer array nums
, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Example:
Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6.
Follow up:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
方法1:动态规划,只要返回最大值,就不需要额外数组来记录相应位置的最大和,只需要实时比较记录最大值
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();
int maxN=INT_MIN;
int sum=0;
for(int i=0;i<n;i++){
if(sum>=0){
sum+=nums[i];
}else{
sum=nums[i];
}
maxN=max(maxN,sum);
}
return maxN;
}
};
Tips:
(1)动态规划特点:子问题和原问题有相似的结构
(2)遍历,额外空间记录每一步的值,找到递推公式