剑指offer--连续子数组的最大和
2017-03-17 19:37
381 查看
贪心策略:累加数组的每个数字,同时用last保存上次的和。
当本次和小于0时,说明前面累加的数字再往后面加只会让后面的数字更小,因此舍弃前面这段和,将其赋为0;
当累加过程中,本次的和小于上一次的和,说明本次的和极有可能为最大值,保存下该值。
考虑整个数组都为负数的情况,连续子数组的最大和实际上就是最大的一个负数。
最后比较一下,last与mayResult,较大值为结果。
当本次和小于0时,说明前面累加的数字再往后面加只会让后面的数字更小,因此舍弃前面这段和,将其赋为0;
当累加过程中,本次的和小于上一次的和,说明本次的和极有可能为最大值,保存下该值。
考虑整个数组都为负数的情况,连续子数组的最大和实际上就是最大的一个负数。
最后比较一下,last与mayResult,较大值为结果。
int FindGreatestSumOfSubArray(vector<int> array) { int mayResult=array[0]; int sum=0; int last=array[0]; int max=array[0]; bool isallminus=true; for(int i=0;i<array.size();i++) { if(array[i]>0) { isallminus=false; break; } if (array[i]>max) max=array[i]; } if(isallminus) return max; for(int i=0;i<array.size();i++) { sum+=array[i]; if (sum<0) sum=0; if (sum<last && last>mayResult) mayResult=last; last=sum; } if (last>mayResult) mayResult=last; return mayResult; }
相关文章推荐
- 【剑指offer之最大子向量和(连续子数组的最大和)】
- 【剑指Offer面试题】 九度OJ1372:最大子向量和(连续子数组的最大和)
- 剑指offer 连续子数组的最大和
- 剑指offer-连续子数组的最大和
- 剑指offer——连续子数组的最大和(动规或者普通算法,不错)
- 剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)
- 剑指Offer之 - 连续子数组的最大和
- 剑指offer 31题 【时间效率】连续子数组的最大和
- 剑指offer——30.连续子数组的最大和
- 【剑指offer-解题系列(31)】 连续子数组的最大和
- 剑指offer - 连续子数组的最大和
- 剑指offer:连续子数组的最大和
- 【剑指offer】面试题31-连续子数组的最大和问题
- 剑指Offer:连续子数组的最大和
- 剑指offer-连续子数组的最大和-java
- 剑指offer之面试题31连续子数组的最大和
- 剑指offer-5-面试31:连续子数组的最大和(时间效率)
- (C++)剑指offer-30:连续子数组的最大和(时间效率)
- 【剑指offer】连续子数组最大和
- 剑指offer--连续子数组的最大和