最大子数组和
贪心算法
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<<dp[i]<<' '; 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<<dp[i]<<' '; } return result; } };