class Solution { public: vector<int> FindGreatestSumOfSubArray(vector<int>& array) { int max=-100,sum=0; vector<int> res; int left=0,right,oldleft,oldright; for(int i=0;i<array.size();i++){ //sum每次与当前值相加 sum += array[i]; if(sum >= max){ max = sum; right = i; } //只要出现最大值,就赋值给max if(sum < 0){ sum = 0; oldleft = left; //记录下来当前的前后,如果后面全负也能记录下来 oldright = right; left = i + 1; } //如果sum<0证明前面这一部分已经对最大值无意义,更新sum } if(left > right){ //说明后面是全负,用旧的 for(int i = oldleft;i <= oldright;i++){ res.push_back(array[i]); } } else{ for(int i = left;i <= right;i++){ res.push_back(array[i]); } } if(res.size() == 0){ //说明全负,找出一个最大值输出 int maxl=-100; for(auto &x : array){ if(x>maxl) maxl=x; } res.push_back(maxl); } return res; } };