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

 

posted @ 2021-03-10 16:44  Mrsdwang  阅读(33)  评论(0)    收藏  举报