53. 最大子数组和

方法一暴力搜索

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;
    }
};

方法四分治

//没什么意义
posted @ 2022-02-25 14:07  fengmao31  阅读(12)  评论(0编辑  收藏  举报