思路
1.动态规划
将子数组拆分为 数字a之前的连续和 + 数字a;
对于数组来说, 如果 连续和<0,则会拖数字a的后腿,就不如直接从数字a开始计算最大值,这样就节省了遍历次数。
再用一个计数器max,及时更新历史上出现过的最大和,最终遍历一遍就可以得到最大和。
2.动态规划
待补充。
代码实现
int maxSubArray(vector<int>& nums) {
int max=0;//历史最大和
int local =0;//当前连续和
max=nums[0];
for(int x=0;x<nums.size();x++){
local=local+nums[x];//当前连续和
if(max<local){max=local;}
//一旦连续和比历史大,就及时更新。
if(local<0){
if(x+1<nums.size()){
local=0;
//如果连续和小于0,且还有后来项那么久舍弃当前项,进入下一个循环从x+1开始计数
continue;
}
}
}
return max;