题目地址:
https://leetcode.com/problems/maximum-subarray/description/
题目描述:
经典的求最大连续子数组之和。
解法:
遍历这个vector,每次循环累加当前数值,同时更新最大值,若当前的累加和是负数,需要更新为0,因为在进行下一次累加求和的时候,
无论下一个数是正还是负,加上上一次的为负的和,都将变得更小,因而下一次求和时直接从当前值开始计算。
代码:
class Solution { public: int maxSubArray(vector<int>& nums) { if (nums.size() == 1) { return nums.at(0); } vector<int>::iterator iter = nums.begin(); int max = -(1 << 31); int sum = 0; for ( ; iter != nums.end(); iter++) { sum += *iter; if (sum > max) { max = sum; } if (sum < 0) { sum = 0; } } return max; } };