[LeetCode]Maximum Subarray

xiaoxiao2021-02-28  106

这次还是动态规划的题:Maximum Subarray

53 Maximum Subarray 39.3% Easy 题目描述如下:

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [-2,1,-3,4,-1,2,1,-5,4], the contiguous subarray [4,-1,2,1] has the largest sum = 6.

要求就是在一个数组中找出一个子数组使得它们的和最大。

由于数组中有负数的存在,所以我们先选择第一个数作为结果sum,然后同时定义了一个临时的子数组的和temp_sum,从第一个数开始,依次加进去,每次都进行一个判断,判断temp_sum是否大于我们要的sum,如果是就将sum变为temp_sum,因为如果加的是正数,那么很明显temp_sum的值肯定会大于sum,所以这个子数组可以继续进行下去,但是如果加的是负数,那么就要看后续的数组的进展情况,如果出现temp_sum<0,那么就直接舍弃前面的这一段数字了,因为后面出现第一个正数作为子数列的和肯定比当前的子数列的和大,所以把temp_sum置为0重新开始就好了。

代码如下:

int maxSubArray(vector<int>& nums) { int sum=nums[0]; int temp_sum=0; int start=0; for(int i=0;i<nums.size();i++) { temp_sum+=nums[i]; if(temp_sum>sum) { sum=temp_sum; } if(temp_sum<0) { temp_sum=0; } } return sum; }

转载请注明原文地址: https://www.6miu.com/read-73873.html

最新回复(0)