最大子数组和
题目描述
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。
解题思路
前缀和:
- 首先一个最大前缀和,一个最小前缀和,两个的差值自然是最大子数组和;
- 每次计算前缀和的时候,更新答案和最小前缀和;
题解
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if(nums.size() == 1){
return nums[0];
}
int ans = INT_MIN;
int min_sum = 0;
int pre_sum = 0;
for(int n : nums){
pre_sum += n;
ans = max(ans, pre_sum - min_sum);
min_sum = min(min_sum, pre_sum);
}
return ans;
}
};