53. Maximum Subarray
仅供自己学习
思路:
这种求序列最大和的题,可以考虑动态规划。我们需要两个变量,一个用于保存当前最大和maxsum,和一串连续序列的最大和temp。temp=max(temp+nums[i],nums[i]),这样做的原因是当我们面对nums[i]时,如果temp+nums[i]<nums[i]那么自然不可能成为最大和,且此时temp会及时更新为nums[i],因为当前的元素值就大于原来的和没必要在记录,所以重新开始一个新的连续序列并更新为当前连续序列的最大和。既然是最大和,那么在此之前会是递增的,所以temp+nums[i]会一直增大,如果减小了,即nums[i]<0后,maxsum应该不能更新,同时也允许temp一点小小的减小,后面可能又会有增大的可能,所以maxsum=max(maxsum,temp)。即方程式为 maxsum[i]=max(maxsum[i-1]+nums[i], maxsum[i-1])。
代码:
1 class Solution { 2 public: 3 int maxSubArray(vector<int>& nums) { 4 int maxsum=nums[0]; 5 int temp=0; 6 for(int i=0;i<nums.size();++i){ 7 temp=max(temp+nums[i],nums[i]); 8 maxsum=max(maxsum,temp); 9 } 10 return maxsum; 11 } 12 };

浙公网安备 33010602011771号