12.24 2012
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
.
class Solution {
public:
int maxSubArray(int A[], int n) {
if(n==1) return A[0];
int ret=INT_MIN;
int temp=0;
for(int i=0;i<n;i++){
temp=max(A[i],temp+A[i]);
ret=max(temp,ret);
}
return ret;
}
};
总结:
1. 一开始的思路是用递归来实现:把整个array拆分成前半段subarray,讨论后半部分subarray是否对前面的array有正面作用。但是后来发现这么做有点复杂,时间性能差,主要是难以用下标了判断应该如何把前面的没用的子集去掉。后来换了一个思路想,可以考虑用动态规划的思路,考虑前半段子集对后续的求和的影响。
2. 当到这个element时,若前面的子集的和是正数,那么就对后面的求和有积极作用,应该保留,即和该element相加,其实就是求前子集与前子集和该元素的和中的最大值。否则,则前面的子集对后续求和没有作用,则应该以该元素为子集的第一个子集,重新开始进行分析。对比求出之后,与前面的所有可能的最大值相比,返回较大值。