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,若sum小于0,必然会对总的和有损耗,因此将sum重置为0,从当前位置继续重复上述过程,直到数组结束,与此同时设置max变量记录求和过程中遇到的最大值。
执行完上述过程,判断max等于0(max初值为0),若大于0,max为所求结果,返回max。
若仍然等于0说明求和过程中未出现过正数,数组中全是负数或0,此时数组最大和就是数组中最大的最大的元素,返回数组中最大的元素即可。
代码如下:
class Solution { public: int maxSubArray(int A[], int n) { int sum=0,max=0; for(int i=0;i<n;i++) { sum+=A[i]; if(sum<0) sum=0; if(sum>max) max=sum; } if(max==0) //说明数组中无正数,遍历取0或者数 { max=A[0]; for(int i=1;i<n;i++) if(max<A[i]) max=A[i]; } return max; } };
leetcode 刷题之路 83 Maximum Subarray
时间: 2024-10-08 02:55:26