leetcode 53 最大子数组和

最大子数组和

leetcode 53 最大子数组和_第1张图片

贪心算法

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        
        int sum=0 ,result= INT32_MIN;      //sum是当前数组的和,result是sum中最大的时候
        for(int i=0 ; i<nums.size() ;i++)
        {
            sum += nums[i];  //记录当前的sum
            if(sum > result) result= sum;  //如果sum大于当前result,更新result
            if(sum < 0) sum = 0;  //某一个时期的sum小于0舍去
        }
        return result;
    }
};

动态规划

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        vector<int>  dp(nums.size() ,0);
        int result = INT_MIN;
        dp[0]= nums[0];
        for(int i=1 ; i<nums.size() ;i++)
        {
            dp[i] = max(nums[i],dp[i-1]+nums[i]);
        }
        for(int i=0 ; i<nums.size() ;i++) 
        {
            // cout<
            if(dp[i] > result) result = dp[i];
        }
        return result;
    }
};

二刷

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if(nums.size()==0) return 0;
        vector<int> dp(nums.size(),0);
        int result = nums[0];
        dp[0] = nums[0];

        for(int i=1 ; i<nums.size() ;i++)
        {
            dp[i] = max(dp[i-1]+nums[i] , nums[i]);
            if(dp[i] > result) result = dp[i];
            // cout<
        }
        return result;
    }
};

你可能感兴趣的:(算法刷题,高频题,leetcode,算法,数据结构,1024程序员节)