方法一暴力搜索
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();int ans=nums[0];int sum=0;//注意这里,差值/临时存储可以用0。因为没有直接比较并和ans相关联。
for(int i=0;i<n;i++)
{
for(int j=i; j<n;j++)
{
sum+=nums[j];
ans=max(sum,ans);
}
sum=0;//注意这里,差值/临时存储可以用0。因为没有直接比较并和ans相关联。
}
return ans;
}
};
方法二贪心
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();int ans=nums[0];int sum=0;
int average=std::accumulate(nums.begin(),nums.end(),0.0)/n;//不能解决问题。
for(int i=0;i<n;i++)
{
sum+=nums[i];
ans=max(sum,ans);
if(sum<0)sum=0;//如果都小于0也可以,因为先比较取完最大值了。
}
return ans;
}
};
方法三动态规划
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();int ans=nums[0];int sum=0;
for(int i=0;i<n;i++)
{
sum=max(sum+nums[i],nums[i]);
ans=max(sum,ans);
}
return ans;
}
};
方法四分治
//没什么意义