输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
很简单的一道题, 但是犯了不少错误,主要在于ret和curmax的初值。每一步都要和ret比较一下。
1 class Solution { 2 public: 3 int maxSubArray(vector<int>& nums) { 4 int len=nums.size(); 5 if(!len) 6 return 0; 7 int ret=INT_MIN, curmax=0; 8 for(int i=0;i<len;++i){ 9 if(curmax<0) 10 curmax=nums[i]; 11 else 12 curmax+=nums[i]; 13 ret=ret>curmax?ret:curmax; 14 } 15 return ret; 16 } 17 };