题目描述:
给你一个整数数组 nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
C++代码:
// 贪心算法
int maxSubArray(vector<int>& nums) {
int N = nums.size();
int front = nums[0];//front记录之前的序列和,若front小于0则抛弃之前的和
int res = nums[0];//记录最大的子序列和
for(int i = 1; i < N; i ++){
if(front < 0){
front = nums[i];//抛弃前面的和
}
else{
front = front + nums[i];//front不小于0,加上前面的和
}
res = max(res, front);//更新最大子序列和
}
return res;
}
// 动态规划算法
int maxSubArray(vector<int>& nums) {
//如果当前元素的前面一个元素大于0,则加上前面元素到当前元素
for(int i = 1; i < nums.size(); i ++){
if(nums[i - 1] > 0)
nums[i] += nums[i - 1];
}
return *max_element(nums.begin(), nums.end()); //返回最大元素
}