总共4种方法,有贪心法、分治法和动态规划,还有一种最笨的,分治法主要是把问题分成小问题进行解决,再对小问题的和进行综合处理,贪心法和动态规划法相同
简单 方法一:这个方法最愚蠢,用i,j当起始结束标志
int maxSubArray(int* nums, int numsSize){
int i,j,s,max=nums[0];
for(i=0;i<numsSize;i++){
s=0;
for(j=i;j<numsSize;j++){
s+=nums[j];
if(s>max){
max=s;
}
}
}
return max;
}
方法二:贪心法,涉及到三个变量,在当前位置的最大和cur_sum,整体最大和max_sum
1.首先设置在0位置,当前最大和为nums[0],题目要求子数组最少包含一个元素
2.当遍历到i位置,当前和是加上之前的元素大,还是只保留本元素大
3接着判断在当前元素的和是否大于max决定是否更新max
int maxSubArray(int* nums, int numsSize){
int cur_sum=nums[0],max_sum=nums[0],i;
for(i=0;i<numsSize;i++){
cur_sum=(cur_sum+nums[i])>nums[i]?(cur_sum+nums[i]):nums[i];
max_sum=cur_sum>max_sum?cur_sum:max_sum;
}
return max_sum;
}
来源:CSDN
作者:qq_42799920
链接:https://blog.csdn.net/qq_42799920/article/details/104572020