给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
贪心算法
设置一个i之前的i-1个元素和sum和最大值ma,如果之前和大于0,那么证明之前的序列为有用序列,把它加到上面,如果之前和小于0,那么证明为无用序列,则放弃之前的序列,从新开始寻找序列。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int ma=nums[0];
int sum=nums[0];//前和
if(nums.size()<=1)return nums[0];
for(int i=1;i<nums.size();i++)
{
if(sum>=0)
{
sum+=nums[i];
ma=max(sum,ma);
}
else
{
sum=nums[i];
ma=max(sum,ma);
}
}
return ma;
}
};
关于max:
包含在c++标准库中头文件< algorithm >中
暴力法
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int ma=nums[0];
for(int i=0;i<nums.size();i++)
{
int sum=0;
for(int j=i;j<nums.size();j++)
{
sum+=nums[j];
if(sum>ma)
ma=sum;
}
}
return ma;
}
};