1 static int wing=[]() 2 { 3 std::ios::sync_with_stdio(false); 4 cin.tie(NULL); 5 return 0; 6 }(); 7 8 class Solution 9 { 10 public: 11 int maxSubArray(vector<int>& nums) 12 { 13 int res=nums[0],i=0,sum=0; 14 int sz=nums.size(); 15 while(i<sz) 16 { 17 sum+=nums[i]; 18 res=max(res,sum); 19 sum=max(sum,0); 20 ++i; 21 } 22 return res; 23 } 24 };
从前向后扫描,设置一个变量res存放结果,一个sum存放当前值。
扫描一次,将结果累加至sum,并比较sum和res,较大值赋给res
然后判定sum,若sum为负值,则将其置为0。
这样一遍扫下来,res中即为和最大的子串