题解 | #连续子数组的最大和#
连续子数组的最大和
http://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484
采用贪心算法,对于一个数组,要得到子数组的最大和,应该将所有可能的子数组的和求出来,然后比较:
对于所有的子数组,他们之间应该没有重合的元素,因为一旦有重合的元素,就可以将两个子数组合并,得到一个更大的子数组,而子数组之间的界限就应该是子数组的累加和,当累加和小于0,就应该到了下一个子数组。因为这个性质,就可以使用贪心算法来求解。我们可以用一个元素来记录子数组的最大值,这样只需要遍历一次,便可以求出最终的解。
class Solution { public: int FindGreatestSumOfSubArray(vector<int> array) { vector<int> nums; int tmp=0,max=INT_MIN; for(int n:array){ tmp+=n; if(tmp>max) max = tmp; if(tmp<0) tmp=0; } return max; } };
tmp用于记录当前子数组的和,只要tmp大于0,说明当前的的子数组还有可能称为最大的子数组,当tmp小于0,表面这个子数组结果肯定不是我们想要的,因此设置tmp=0,表示从新再找一个子数组,同时max用于记录子数组最大值,。