intmaxSubArray(vector<int> &nums) { vector<int> res = nums; int n = nums.size(); for (int i = 1; i < n; i++) if (res[i - 1] > 0) res[i] = nums[i] + res[i - 1]; return *max_element(res.begin(), res.end()); }
解法二:
思路:
同上。
算法流程:
如果数组元素的个数为0或1时,直接返回对应结果;
初始化最大值与当前子数组和为数组第一个元素;
如果sum<0,则sum归零;
如果sum>max,则更新max;
返回max
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
intmaxSubArray(vector<int> &nums) { if (nums.size() < 1) return0; if (nums.size() == 1) return nums[0]; intmax = nums[0]; int sum = nums[0]; for (int i = 1; i < nums.size(); i++) { if (sum < 0) sum = 0; sum += nums[i]; if (sum > max) max = sum; } returnmax; }