Maximum Subarray (最大子数组)
题目描述:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [−2,1,−3,4,−1,2,1,−5,4], the contiguous subarray [4,−1,2,1] has the largest sum = 6.
这道题很经典,《算法导论》上有相关讨论,但是没有介绍本文的这种解法。这道题其实不难,写的时候要记得考虑输入全为负数这种情况。
solution:
int maxSubArray(vector<int>& nums) { if (nums.empty()) return INT_MIN; int max = nums[0]; int sum = nums[0]; for (int i = 1; i < nums.size(); ++i) { if (sum < 0) sum = nums[i]; else sum += nums[i]; if (sum > max) max = sum; } return max; }