问题描述:
- 给定一个无序数组, a 1 , a 2 , . . . a n a_1,a_2,...a_n a1,a2,...an,请给出它的所有连续子数组中,各个数字和最大的一个子数组.(只给出最大的子数组和即可)
- EG:给定,[-2,1,-3,4,-1,2,1,-5,4],得出其最大子数组和为6,该子数组为[4,-1,2,1].
算法及其思想:
复杂的DP方法:
- 思想:
顺序扫描每一个数组值A[i],并且维护三个变量–maxSum,expense,nxtSuspect.在这三个变量中,maxSum代表了数组A[0,…,i-1]中的最大子数组和,expense代表了maxSum与当前数值A[i]合并为新的最大子数组所需代价,nxtSuspect代表了A[0,…,i-1]中未能和maxSum合并,也未能取代maxSum的最大子数组和. - 算法:
class Solution
{
public:
int maxSubArray(vector<int>